【问题标题】:Refresh ExpandableListView from within my adapter从我的适配器中刷新 ExpandableListView
【发布时间】:2013-03-12 00:55:25
【问题描述】:

我只发现了一个类似的问题,但对我没有帮助。我希望你能帮助我,因为我被困住了。

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

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?我必须从适配器内部进行吗?如果没有,还有什么办法?

P.S:如果你们需要更多代码,请告诉我。

【问题讨论】:

    标签: android expandablelistview notifydatasetchanged


    【解决方案1】:

    如果没有看到您的其余代码(您如何实例化您的 BaseExpandableAdapter),我无法确定,但在您的 onClick() 方法结束时调用 notifyDatasetChanged() 应该可以解决问题。

    【讨论】:

    • 我已经尝试过了,但是没有用。我不应该在删除子行后打电话给notifyDatasetChanged()。因为我只从我的数据库中删除它,而不是从列表中删除。当我使用 ListView 时,我使用了 adapter.remove()adapter.add() 这两个方法,之后我调用了 notifyDatasetChanged(),它就像一个魅力,但我无法用 ExpandableListView 弄清楚。
    • 如果你的适配器是基于一个列表(而不是数据库),你必须把它从列表中移除,然后调用 notifyDataSetChanged()。
    • 在我发现如何从我的列表中删除特定项目后,我管理了它。那是我唯一的问题,而且很简单。谢谢你的提示,对我帮助很大。附言我有一个与 LinkedHashMap 链接的 ArrayList 的 ArrayList。起初不知道如何从那里获取特定项目。但最后很简单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多