notifyDataSetChanged 在我的 activity 中不起作用

notifyDataSetChanged not work in my activity

在我的代码中,当删除列表视图的行时,列表视图不change.i使用adapter.notifyDataSetChange(),但它不是word.this是我的代码:代码使class.

CustomList adapter;
Integer[] imageId;
public String[] _Data2;
 public int positionAll;
ArrayList<ArrayList<String>> _Data = new ArrayList<ArrayList<String>>();
DataBase data = new DataBase(Show_Code.this, "MELK_TBL");


 try {
        data.open();
        _Data = data.GetData();
        imageId = new Integer[_Data.size()];
        _Data2 = new String[_Data.size()];
        for (int i = 0; i < _Data.size(); i++) {
            imageId[i] = R.drawable.municipal;
            _Data2[i] = _Data.get(i).get(1) + "_" + _Data.get(i).get(2) + "_" + _Data.get(i).get(3) + "_" + _Data.get(i).get(4) + "_" + _Data.get(i).get(5) + "_" + _Data.get(i).get(6) + "_0";
        }
        adapter = new CustomList(Show_Code.this, _Data2, imageId);
        data.close();
    } catch (Exception e) {
        Toast.makeText(getApplication(), e.toString(), Toast.LENGTH_LONG).show();
    }

    list.setAdapter(adapter);



list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view,
                                       int position, long id) {

            try {
                data.open();
                data.Delete(_Data.get(position).get(1), _Data.get(position).get(2), _Data.get(position).get(3), _Data.get(position).get(4), _Data.get(position).get(5), _Data.get(position).get(6), _Data.get(position).get(7));
                data.close();
                adapter.notifyDataSetChanged();
            } catch (Exception e) {
                Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show();
            }
            return true;
        }
    });

请帮助我,我没有时间:(

您需要使用方法重新组织您的代码,仅供 Select 再次使用数据并执行 list.setAdapter(adapter); 然后使用 adapter.notifyDataSetChanged();

您正在适配器中传递 _Data2 对象。从数据中删除后,您应该更新相同的对象。尝试在 onItemLongClick(AdapterView<?> parent, View view,int position, long id) 方法中的 data.close() 之前添加:

_Data = data.GetData();
imageId = new Integer[_Data.size()];
_Data2.clear();
for (int i = 0; i < _Data.size(); i++) {
     imageId[i] = R.drawable.municipal;
     _Data2[i] = _Data.get(i).get(1) + "_" + _Data.get(i).get(2) + "_" + _Data.get(i).get(3) + "_" + _Data.get(i).get(4) + "_" + _Data.get(i).get(5) + "_" + _Data.get(i).get(6) + "_0";
}

不要创建 _Data2 的新对象。只需清除同一个对象并再次在其中添加整个数据,然后您可以调用 adapter.notifyDataSetChanged() 然后它会自动更新。

删除值后,您需要传递已删除所有这些值的新数组列表,然后通知适配器 class。在您的情况下,请参阅以下代码

list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view,
                                       int position, long id) {

            try {
                data.open();
                data.Delete(_Data.get(position).get(1));
                data.close();
                **//Edited code...**
                 _Data.get(position).remove(1);
                 adapter.refreshView(_Data);
                 **//Edited code...**
            } catch (Exception e) {
                Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show();
            }
            return true;
        }
    });

并且在适配器中 class refreshview 方法如下所示,

    public void refreshView(String[] _Data) {
    this._Data = _Data;
     notifyDataSetChanged();
    }

通过这种方式可以通知数据。例如我只删除了一个值并通知。

希望这对您有所帮助:)

由于 Array 的大小在 运行 时没有改变,所以你需要创建新的适配器并再次设置为列表 您必须在 onItemLongClick

中添加此代码
data.open();
        _Data = data.GetData();
        imageId = new Integer[_Data.size()];
        _Data2 = new String[_Data.size()];
        for (int i = 0; i < _Data.size(); i++) {
            imageId[i] = R.drawable.municipal;
            _Data2[i] = _Data.get(i).get(1) + "_" + _Data.get(i).get(2) + "_" + _Data.get(i).get(3) + "_" + _Data.get(i).get(4) + "_" + _Data.get(i).get(5) + "_" + _Data.get(i).get(6) + "_0";
        }
        adapter = new CustomList(Show_Code.this, _Data2, imageId);
        data.close();
        list.setAdapter(adapter)