从我的适配器中刷新可扩展列表视图

4

我只找到了一个类似的问题,但没有帮助我。希望你能帮忙,因为我卡住了。

这是我的自定义适配器(仅相关部分):

MyExpandableListAdapter:

public class MyExpandableListAdapter extends BaseExpandableListAdapter {

    //...

    @Override
    public View getChildView(int groupPosition, int childPosition,
            boolean isLastChild, View view, ViewGroup parent) {     
        ChildInfo childInfo = (ChildInfo) getChild(groupPosition, childPosition);
        if (view == null) {
            LayoutInflater infalInflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = infalInflater.inflate(R.layout.prisustva_detaljno_child_row,
                    null);
        }

        Button delete = (Button) view.findViewById(R.id.delete);
        delete.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                RelativeLayout Rl = (RelativeLayout) v.getParent();
                TextView id = (TextView) Rl.findViewById(R.id.id_prisustvo);
                PrisustvaAdapter deleteByID = new PrisustvaAdapter(context);

                deleteByID.openToWrite();
                deleteByID.openToRead();
                deleteByID.deleteID(id .getText().toString());
                deleteByID.close();

                Toast.makeText(context, "Successfully deleted!",
                        Toast.LENGTH_LONG).show();
            }
        });

        // ...
        return view;
    }

// ...
}

就像您看到的,我在我的ExpandableListView每个子行中都有一个按钮。当我点击该按钮时,它会触发我的数据库中的删除过程,正如您也可以看到的那样,我必须从适配器内部执行删除操作,因为只有在那里,我才能为子行内的按钮创建单击事件。我想知道当我从数据库中删除数据时,如何刷新我的ExpandableListView?我是否必须从适配器内部进行这样的操作?如果不是,还有什么替代方法吗?
附言:如果您需要更多代码,请告诉我。
1个回答

8

我需要查看您代码中的其余部分才能确定(如何实例化您的BaseExpandableAdapter),但在onClick()方法的末尾调用notifyDatasetChanged()应该就可以解决问题了。


我已经尝试过了,但它没有起作用。删除子行后,我不应该调用notifyDatasetChanged()吗?因为我只是从数据库中将其删除,而不是从列表中删除。当我使用ListView时,我使用了adapter.remove()adapter.add()方法,然后调用了notifyDatasetChanged(),这很顺利,但我无法在ExpandableListView中找到解决方法。 - Aksiom
1
如果您的适配器基于列表(而不是数据库),则必须从列表中删除它,然后调用notifyDataSetChanged()。 - znat
2
在我找到如何从列表中删除特定项之后,我终于解决了这个问题。这是我的唯一问题,而且它非常简单。谢谢你的提示,帮了我很多。附言:我有一个ArrayList由LinkedHashMap连接的ArrayLists。一开始不知道如何从中获取特定项。但最终它非常简单。 - Aksiom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接