Java notifydatasetchanged后未调用getview
因此,我正在处理一个实时列表视图,我需要在单击按钮时更新列表视图,所以执行了以下操作:Java notifydatasetchanged后未调用getview,java,android,listview,custom-adapter,Java,Android,Listview,Custom Adapter,因此,我正在处理一个实时列表视图,我需要在单击按钮时更新列表视图,所以执行了以下操作: private void ReloadData(){ DataList.clear(); try{ for (int i =0;i<ItemsCount;i++){ TempItem=new STRUCTS.STRUCT_ProductItem(); TempItem.setName(dbh.ReadDefine(Produ
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();
}
}
}
当我点击该按钮时,它不会更新日志视图,也不会更改任何listview元素
但是,当我滚动listview使项目不可见时,我会向后滚动,因为它们的数据会更新
当项目失去可见性,然后再次获得它时,运行GetView
为什么Notifydatachanged不会在我的自定义适配器上更新UI/运行GetView?请尝试编写此代码
private void ReloadData(){
DataList.clear();
if(!IsAdapterSet){
adapter = new LISTCUSTOM_ProductITEM(MyActivity.this,DataList);
list.setAdapter(adapter);
IsAdapterSet=true;
}
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);
}
adapter.swapItems(DataList);
}catch (Exception ex){
ex.printStackTrace();
Log.e("ERRORCATCHER", "OnForLoop (Fill Product Data): "+ex.getMessage() );
}
}
}
private void ReloadData(){
DataList.clear();
如果(!IsAdapterSet){
adapter=new LISTCUSTOM\u ProductITEM(MyActivity.this,DataList);
list.setAdapter(适配器);
IsAdapterSet=true;
}
试一试{
对于(inti=0;i试试这个
private void ReloadData(){
ArrayList<STRUCTS.STRUCT_ProductItem> list = new ArrayList<>;
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]);
list.add(TempItem);
}
} catch (Exception ex){
ex.printStackTrace();
Log.e("ERRORCATCHER", "OnForLoop (Fill Product Data): "+ex.getMessage() );
}
DataList.clear();
DataList.addAll(list);
adapter.notifyDataSetChanged();
}
private void ReloadData(){
ArrayList=新的ArrayList;
试一试{
对于(int i=0;首先清除DataList
中的项目,然后使用DataList.addAll(list.getData())
;运行NOTIFYDATASETCHANGE时,它会使列表滚动到第一个,并且GetView不会运行。它实际上会使情况变得更糟?DataList.addAll没有首先清除它?它使我的列表中充满了重复的项,但仍然没有working@Disco4uf在适配器DataList.addAll(列表)中更改代码;在您以前的代码中我以为您要添加以前的数据新数据
private void ReloadData(){
DataList.clear();
if(!IsAdapterSet){
adapter = new LISTCUSTOM_ProductITEM(MyActivity.this,DataList);
list.setAdapter(adapter);
IsAdapterSet=true;
}
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);
}
adapter.swapItems(DataList);
}catch (Exception ex){
ex.printStackTrace();
Log.e("ERRORCATCHER", "OnForLoop (Fill Product Data): "+ex.getMessage() );
}
}
}
public void swapItems(ArrayList<STRUCTS.STRUCT_ProductItem> list) throws InterruptedException {
DataList.addAll(list);
this.notifyDataSetChanged();
private void ReloadData(){
ArrayList<STRUCTS.STRUCT_ProductItem> list = new ArrayList<>;
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]);
list.add(TempItem);
}
} catch (Exception ex){
ex.printStackTrace();
Log.e("ERRORCATCHER", "OnForLoop (Fill Product Data): "+ex.getMessage() );
}
DataList.clear();
DataList.addAll(list);
adapter.notifyDataSetChanged();
}