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)
在我的代码中,当删除列表视图的行时,列表视图不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)