2
Hello, I would like to know how to remove a subitem from an Expandedlistview, in other words remove the Adapter item, where the Adapter receives a Map<Categoria, List<SubCategoria>>
and then give a notifyDataSetChanged()
.
Fragment of the list
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_subcategoria_despesa, container, false);
mListView = (ExpandableListView) v.findViewById(R.id.listDes);
refreshLista();
return v;
}
@Override
public void onResume() {
super.onResume();
}
private void refreshLista() {
CategoriaDAO cDAO = new CategoriaDAO(getContext());
SubCategoriaDAO sDAO = new SubCategoriaDAO(getContext());
List<Categoria> cList = cDAO.getLista(1);
collection = new LinkedHashMap<>();
for (Categoria c : cList){
List<SubCategoria> sList = sDAO.getLista(c.getId());
collection.put(c, sList);
}
SubcategoriaExpandableAdapter adapter = new SubcategoriaExpandableAdapter(getContext(), cList, collection);
mListView.setAdapter(adapter);
}
List Adapter
public class SubcategoriaExpandableAdapter extends BaseExpandableListAdapter {
private Context mContext;
private Map<Categoria, List<SubCategoria>> mCollection;
private List<Categoria> mList;
private LayoutInflater inflater;
public SubcategoriaExpandableAdapter(Context context, List<Categoria> list, Map<Categoria, List<SubCategoria>> collection) {
this.mContext = context;
this.mCollection = collection;
this.mList = list;
this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return mCollection.get(mList.get(groupPosition)).get(childPosition);
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
final SubCategoria subCategoria = (SubCategoria) getChild(groupPosition, childPosition);
ViewHolderItem holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.subcategoria_row, null);
holder = new ViewHolderItem();
convertView.setTag(holder);
holder.tvItem = (TextView) convertView.findViewById(R.id.tvSubCat);
holder.idItem = (TextView) convertView.findViewById(R.id.id);
holder.btItem = (ImageButton) convertView.findViewById(R.id.opcsubcat);
}else{
holder = (ViewHolderItem) convertView.getTag();
}
holder.tvItem.setText(subCategoria.getNome());
holder.idItem.setText(String.valueOf(subCategoria.getId()));
final View finalConvertView = convertView;
holder.btItem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PopupMenu popupMenu = new PopupMenu(mContext, v);
popupMenu.getMenuInflater().inflate(R.menu.subcat_menu, popupMenu.getMenu());
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.editarSub:
Intent intent = new Intent(mContext, EditaSubcategoriaActivity.class);
intent.putExtra("id", subCategoria.getId());
intent.putExtra("idcat", subCategoria.getIdCategoria());
mContext.startActivity(intent);
break;
case R.id.apagarSub:
AlertDialog.Builder ab = new AlertDialog.Builder(mContext);
ab.setTitle("Apagar subcategoria?");
ab.setMessage("Todas os lançamentos dessa subcategoria serão apagados.");
ab.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
SubCategoriaDAO dao = new SubCategoriaDAO(mContext);
LancamentoDAO dao1 = new LancamentoDAO(mContext);
dao1.deleteAllBySubcategoria(subCategoria.getId());
dao.deletar(subCategoria);
dialog.dismiss();
}
});
ab.setNegativeButton("CANCELAR", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
ab.show();
break;
}
return false;
}
});
popupMenu.show();
}
});
return convertView;
}
@Override
public int getChildrenCount(int groupPosition) {
return mCollection.get(mList.get(groupPosition)).size();
}
@Override
public Object getGroup(int groupPosition) {
return mList.get(groupPosition);
}
@Override
public int getGroupCount() {
return mList.size();
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
final Categoria categoria = (Categoria) getGroup(groupPosition);
ViewHolderGroup holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.categoria_row, null);
holder = new ViewHolderGroup();
convertView.setTag(holder);
holder.tvGroup = (TextView) convertView.findViewById(R.id.tvCat);
holder.idGroup = (TextView) convertView.findViewById(R.id.idc);
}else{
holder = (ViewHolderGroup) convertView.getTag();
}
holder.tvGroup.setText(categoria.getNome());
holder.idGroup.setText(String.valueOf(categoria.getId()));
ExpandableListView listView = (ExpandableListView) parent;
listView.expandGroup(groupPosition);
listView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
parent.expandGroup(groupPosition);
Intent i = new Intent(mContext, EditaSubcategoriaActivity.class);
i.putExtra("idcat", categoria.getId());
mContext.startActivity(i);
return true;
}
});
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.i("LOGE", position + "");
}
});
return convertView;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
class ViewHolderGroup {
TextView tvGroup;
TextView idGroup;
}
class ViewHolderItem {
TextView tvItem;
TextView idItem;
ImageButton btItem;
}
By clicking delete I delete the subcategory of the database, but I couldn’t find a way to delete it from Adapter to update the expandedlistview.
Thanks in advance.
Very good, worked as I wanted, thanks @ramaral.
– Allan Chrystian
and if I update an item, as I do?
– Allan Chrystian
Depends. Ask new question and give details of how/where you are making this change.
– ramaral