Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java notifydatasetchanged后未调用getview_Java_Android_Listview_Custom Adapter - Fatal编程技术网

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