【发布时间】:2018-11-29 04:12:53
【问题描述】:
所以我正在处理实时列表视图,我需要列表视图在按钮单击时更新,这些也是如此:
private void ReloadData(){
DataList.clear();
try{
for (int i =0;i<ItemsCount;i++){
TempItem=new STRUCTS.STRUCT_ProductItem();
TempItem.setName(dbh.ReadDefine(ProductID,i+"","name")+"");//Read name if there is any set
TempItem.setImgs(Uri.parse(dbh.ReadDefine(ProductID,i+"","img")+""));//Read image if there is any set
TempItem.setInfo("PR"+i);//Desc
Log.i("TAG", "ReloadData: "+IsOn[i]);//Is product avalible
TempItem.setToggled(IsOn[i]);
DataList.add(TempItem);
}
}catch (Exception ex){
ex.printStackTrace();
Log.e("ERRORCATCHER", "OnForLoop (Fill Product Data): "+ex.getMessage() );
}
//
if(!IsAdapterSet){
adapter = new LISTCUSTOM_ProductITEM(MyActivity.this,DataList);
list.setAdapter(adapter);
IsAdapterSet=true;
}else{
try {
adapter.swapItems(DataList);
} catch (Exception e) {
e.printStackTrace();
}
}
}
我的自定义适配器上的 SwapItems:
public void swapItems(ArrayList<STRUCTS.STRUCT_ProductItem> list) throws InterruptedException {
DataList=list;
this.notifyDataSetChanged();
}
这没有给出任何错误,正如我从日志中看到的那样,新项目已成功添加并且它们的数据是新的
listview 不会自行更新!所以当我单击运行 ReloadData() 的按钮时 它对列表视图没有影响......
实际上这个日志没有运行:
@Override
public View getView(final int CPosition, @Nullable View convertView, @NonNull ViewGroup parent) {
final STRUCTS.STRUCT_ProductItem Currect_Item=DataList.get(CPosition);
Log.i("TAG", "View updated : "+Currect_Item.gettoggled());
/*Define stuff*/
itempicture.setImageURI(Currect_Item.getImgs());
/*More listview update stuff*/
当我单击该按钮时它不会记录 ViewUpdated 并且它不会更改任何列表视图元素
但是当我滚动列表视图时项目不可见然后我回滚它们的数据已更新!
当一个项目失去可见性然后再次获得它时运行GetView
为什么 Notifydatachanged 不会更新 UI / 在我的自定义适配器上运行 GetView?
【问题讨论】:
-
先尝试清除
DataList中的项目,然后使用DataList.addAll(list.getData());
标签: java android listview custom-adapter