从 ExpandableList 适配器中删除项目

Remove items from ExpandableList adapter

我有以下问题:

我实现了一个 ExpandableListView,它向我展示了数据库中的一系列记录。每个项目旁边都有一个用于删除该项目的按钮。

我的问题是从 ExpandableList 中删除项目的方法工作正常,但我希望它在完成删除时刷新 ExpandableList 并再次显示没有该项目的记录。

这是我的适配器方法:

    public class BaseExpandableListViasAdapterde extends BaseExpandableListAdapter {
    
(...)
     public BaseExpandableListViasAdapterde(ArrayList<String> listCategoria, Map<String, ArrayList<String>> mapChild, Map<String, ArrayList<String>> mapChildNomVias, Context context) {
            this.listCategoria = listCategoria;
            this.mapChild = mapChild;
            this.mapChildNomVias = mapChildNomVias;
            this.context = context;
        }

    (...)

    @Override
        public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, final ViewGroup parent) {
    
            final String itemCod = (String)getChild(groupPosition, childPosition);
            final String itemNom = (String)getChild2(groupPosition, childPosition);
    
            convertView = LayoutInflater.from(context).inflate(R.layout.filter_child_layout_vias, null);
    
            TextView tvChildCodigoVia = convertView.findViewById(R.id.txtViasCod);
            TextView tvChildNombreVia = convertView.findViewById(R.id.txtViasnombre);
    
            ImageView buttonTrash= convertView.findViewById(R.id.imgBorrarVia);
    
            buttonTrash.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
    
                    String codVia = (String) getChild(groupPosition, childPosition);
    
                    borraViasBD(codVia); //This method delete the item in the database. Works fine.
    
                    //Try this, but don't work
                    listCategoria.remove(groupPosition);
                    notifyDataSetChanged();
    
                }
            });
    
            tvChildCodigoVia.setText(itemCod);
            tvChildNombreVia.setText(itemNom);
            return convertView;
    }
    
(...)
    }

知道如何刷新 ExpandableList 吗? 谢谢!

试试这个:

@Override
public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {

    String itemCod = (String)getChild(groupPosition, childPosition);
    String itemNom = (String)getChild2(groupPosition, childPosition);

    convertView = LayoutInflater.from(context).inflate(R.layout.filter_child_layout_vias, null);

    TextView tvChildCodigoVia = convertView.findViewById(R.id.txtViasCod);
    TextView tvChildNombreVia = convertView.findViewById(R.id.txtViasnombre);

    ImageView buttonTrash= convertView.findViewById(R.id.imgBorrarVia);

    buttonTrash.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            String codVia = (String) getChild(groupPosition, childPosition);

            borraViasBD(codVia); //This method delete the item in the database. Works fine.

            //Try this
            ArrayList<String> listCod = mapChild.get((String)getgroup(groupPosition));
            ArrayList<String> listNom = mapChildNomVias.get((String)getgroup(groupPosition));
            listCod.remove(childPosition); // Updated
            listNom.remove(childPosition); // Updated
            notifyDataSetChanged();
        }
    });

    tvChildCodigoVia.setText(itemCod);
    tvChildNombreVia.setText(itemNom);
    return convertView;
}

您可以通过执行以下 3 个步骤来刷新可扩展列表视图。

  • 成功删除项目表单数据库后,您可以刷新数据 通过删除该特定项目或再次检索整个数据来列出。

  • 刷新数据列表后可以调用notifyDataSetChanged()

  • 如果notifyDataSetChanged()不工作那么你可以设置可扩展 以新数据列表为开头的列表视图。