【问题标题】:Refresh List View programmatically within Adapter在适配器中以编程方式刷新列表视图
【发布时间】:2016-11-24 16:02:51
【问题描述】:

如何刷新 子列表 Expandable List View

我正在使用以下代码删除子列表item,但unable to refresh子项列表。

public class ListAdapter extends BaseExpandableListAdapter {

private Context _context;
private List<String> _listDataHeader;
private HashMap<String, List<String>> _listDataChild;
private DBAdapter mydb;

    public SyncExpandablePendingListAdapter(Context context, List<String> listDataHeader,
                                        HashMap<String, List<String>> listChildData) {
    this._context = context;
    this._listDataHeader = listDataHeader;
    this._listDataChild = listChildData;
}

@Override
public Object getChild(int groupPosition, int childPosititon) {
    return this._listDataChild.get(this._listDataHeader.get(groupPosition))
            .get(childPosititon);
}

@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) {

    ....

    if (convertView == null) {
        LayoutInflater infalInflater = (LayoutInflater) this._context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.sync_pending_list_item, null);
    }

    ....

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

                Log.d("oldList:", _listDataChild.toString());

                mydb.DeleteECRecord(data2);
                _listDataChild.remove(childPosition);
                notifyDataSetChanged();

                Log.d("newList:", _listDataChild.toString());

    });

}

.............

}

实际上,我没有得到我必须做出改变的地方?我到底错过了什么? :

请让我知道我在哪里做错了?我错过了什么?

【问题讨论】:

    标签: android listview adapter expandablelistview baseadapter


    【解决方案1】:

    您从数据库中删除了该条目,但没有从 HashMap 中删除它。也将其从 HashMap 中删除,然后调用 notifyDataSetChanged()。

    【讨论】:

    • 我试过这个:_listDataChild.remove(childPosition); notifyDataSetChanged();但我没有取得任何成功
    • @Oreo 使用调试。在 getChildView() 中放置断点。通知后,检查 HashMap 中的新列表是什么。也许 HashMap 没有以这种方式更新,您必须再次将修改后的列表与该键相对应。调试会有所帮助:)
    • 在将数据从数据库中删除到 HashMap 之前和之后获取相同的记录...我无法从 HashMap 中删除数据,而数据已从数据库表中删除...请检查更新的代码
    • @Oreo 试试这个删除:_listDataChild.get(_listDataHeader.get(groupPosition)).remove(childPosition);
    • 我相信您想从子列表中删除单个条目,但您正在做的是从 HashMap 中删除键“childPosition”。
    【解决方案2】:

    在调用 notifyDataSetChanged() 之前,您必须重新加载支持您的适配器的列表。 notifyDataSetChanged() 让适配器知道列表已更改,因此重新加载列表。但是您必须为列表加载适配器的后备列表才能显示视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-08
      相关资源
      最近更新 更多