Android 在适配器中以编程方式刷新列表视图

Android 在适配器中以编程方式刷新列表视图,android,listview,adapter,expandablelistview,baseadapter,Android,Listview,Adapter,Expandablelistview,Baseadapter,如何刷新可扩展列表视图中的子列表 我正在使用以下代码删除子列表项,但无法刷新子列表项 public class ListAdapter extends BaseExpandableListAdapter { private Context _context; private List<String> _listDataHeader; private HashMap<String, List<String>> _listDataChild; private D

如何刷新
可扩展列表视图中的子列表

我正在使用以下代码删除子列表项,但
无法刷新子列表项

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());

    });

}

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

}
公共类ListAdapter扩展了BaseExpandableListAdapter{
私人语境(private Context)(私人语境);;
私有列表listDataHeader;
私有HashMap_listDataChild;
私有数据库适配器mydb;
公共SyncExpandablePendingListAdapter(上下文上下文,列表listDataHeader,
HashMap listChildData){
这._context=context;
这。_listDataHeader=listDataHeader;
这。_listDataChild=listChildData;
}
@凌驾
公共对象getChild(int-groupPosition、int-ChildPosition){
返回此。_listDataChild.get(此。_listDataHeader.get(groupPosition))
.get(childpositionon);
}
@凌驾
公共长getChildId(int-groupPosition,int-childPosition){
返回子位置;
}
@凌驾
公共视图getChildView(最终int groupPosition,最终int childPosition,
布尔值isLastChild、视图转换视图、视图组父级){
....
if(convertView==null){
LayoutInflater infalInflater=(LayoutInflater)this.\u上下文
.getSystemService(上下文布局\充气机\服务);
convertView=infalInflater.充气(R.layout.sync\u pending\u list\u项,空);
}
....
btnDelete.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
Log.d(“oldList:”,_listDataChild.toString());
mydb.DeleteRecord(数据2);
_listDataChild.remove(childPosition);
notifyDataSetChanged();
Log.d(“newList:”,_listDataChild.toString());
});
}
.............
}
事实上,我没有达到我必须做出改变的程度?我到底错过了什么


请让我知道我在哪里出错?我缺少什么?

在调用notifyDataSetChanged()之前,必须重新加载支持适配器的列表。notifyDataSetChanged()让适配器知道列表已更改,因此需要重新加载列表。但您必须加载适配器的支持列表,以便列表显示视图。

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

我尝试了以下操作:_listDataChild.remove(childPosition);notifyDataSetChanged();但没有得到任何结果success@Oreo使用调试。将断点放在getChildView()中。通知后,检查HashMap中的新列表。可能HashMap没有以这种方式更新,您必须将修改后的列表重新放入对应于该键的位置。调试将有助于:)在将数据库中的数据删除到HashMap之前和之后获取相同的记录…我无法从HashMap中删除数据,而数据已从m数据库表…请检查是否已更新code@Oreo尝试以下方法删除:_listDataChild.get(_listDataHeader.get(groupPosition)).remove(childPosition);我相信您想从子列表中删除一个条目,但您要做的是从HashMap中删除键“childPosition”。