Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.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
Android notifyDataSetChanged()不使用baseAdapter和自定义ListView_Android_Listview - Fatal编程技术网

Android notifyDataSetChanged()不使用baseAdapter和自定义ListView

Android notifyDataSetChanged()不使用baseAdapter和自定义ListView,android,listview,Android,Listview,我需要ListView逐行显示数据 下面是代码示例: public class ClassName extends AppCompatActivity { ListView _listView; List <Info> myList; CustomAdapterClass myAdapted; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstan

我需要ListView逐行显示数据

下面是代码示例:

public class ClassName extends AppCompatActivity {
  ListView _listView;
  List <Info> myList;
  CustomAdapterClass myAdapted;

 protected void onCreate(Bundle savedInstanceState) {    
     super.onCreate(savedInstanceState);
        setContentView(R.layout.myActivity);
        _listView = (ListView) findViewById(R.id.viewListView);
        myList= new ArrayList<>();

        myAdapted = new CustomAdapterClass();
        _listView.setAdapter(myAdapted);
        CallingSomeMethodToGetData (SomeData myData);

                  DoThisInBackground{ 
                    myList.clear();
                    Info info;
                    int k=0;
                    for (SomeData  object: myData){
                       Log.i("k:", String.valueOf(k));
                       k++;
                        info = new Info();
                        info.addData(object.getdata());
                        myList.add(info)
                        myAdapted.notifyDataSetChanged();
                        SystemClock.sleep(400);
                    }
                }
    }  

 class  CustomAdapterClass extends BaseAdapter{
        @Override
        public int getCount() {
            return myList.size();
        }
        @Override
        public Object getItem(int i) {
            return myList.get(i);
        }

        @Override
        public long getItemId(int i) {
            return 0;
        }

        @Override
        public View getView(final int i, View view, ViewGroup viewGroup) {
            Log.i("I: ", String.valueOf(i));
            view = getLayoutInflater().inflate(R.layout.custom_list_view, null);
            TextView  _textView = (TextView)view.findViewById(R.id.name_CustomView);

             _textView .setText(mysList.get(i).getMyData());

            return view;
        }
    }

    }
公共类类名扩展了AppCompative活动{
ListView _ListView;
列出我的清单;
自定义适配器类myAdapted;
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.myActivity);
_listView=(listView)findViewById(R.id.viewListView);
myList=新的ArrayList();
myAdapted=新的CustomAdapterClass();
_setAdapter(myAdapted);
调用SomeMethodToGetData(SomeData myData);
DoThisInBackground{
myList.clear();
信息;
int k=0;
对于(SomeData对象:myData){
Log.i(“k:,String.valueOf(k));
k++;
信息=新信息();
info.addData(object.getdata());
myList.add(信息)
myAdapted.notifyDataSetChanged();
系统时钟。睡眠(400);
}
}
}  
类CustomAdapterClass扩展了BaseAdapter{
@凌驾
public int getCount(){
返回myList.size();
}
@凌驾
公共对象getItem(int i){
返回myList.get(i);
}
@凌驾
公共长getItemId(int i){
返回0;
}
@凌驾
公共视图getView(最终int i、视图视图、视图组视图组){
Log.i(“i:,String.valueOf(i));
视图=GetLayoutFlater().充气(R.layout.custom\u list\u视图,空);
TextView\u TextView=(TextView)view.findViewById(R.id.name\u CustomView);
_setText(mysList.get(i.getMyData());
返回视图;
}
}
}
我得到的行为是,
ListView
在所有数据加载到
myList
之前不会更新

换句话说,我在日志中为每个
info
打印
k
,当加载所有数据时,
I
开始在日志中打印 我尽量减少代码,这样就可以阅读了

NotifyDataSetChanged 应该从UI线程调用

也可以考虑使用CurryReVIEW以获得更好的性能。它还暴露了

公共最终无效notifyItemChanged(int位置,@Nullable对象负载)

这样,您也可以只更新特定的项目。

试试这段代码。。 定义适配器构造函数。。 下面的代码定义到适配器中

    private Context context;
    private List<Info>mylist=new ArrayList<>();

    public CustomAdapterClass(Context context, List<Info> mylist) {
        this.context = context;
        this.mylist = mylist;
    }

那么,我应该在哪里调用notifyDataSetChanged()?好的,我刚刚检查了背景和UI的情况。我在哪里调用myAdapted.notifyDataSetChanged(),它实际上是在调用它,但它不起作用。您在哪里将
新信息()
添加到
myList
?并且您想将项目逐个添加到
myList
中?就在
Info.addData(object.getdata())
之后,我修改代码时错过了它。仍然无法在ListView中逐行获取数据我正在从在线数据库读取数据。我不希望用户等待所有数据下载后才看到它。我需要一次查看每个数据get@SHADOW.NET检查更新的答案。考虑使用Realver视图,因为它将解决您的用例。此外,如果您知道更新了哪个项目,则不建议使用notifyDataSetChanged。还有更优化的方法,实际上,这不是不同线程的情况。我只是检查了一下,没有做背景,它不是working@SHADOW.NET您正在获取数据并更新信息Object Info.addData(Object.getdata());但是您在哪里更新适配器中的数据?如果不更新数据notifyDataSetChanged是可用的,则它就在
info.addData(object.getdata())
修改代码时遗漏了它之后。
    myAdapted = new CustomAdapterClass(this,mList); // if fragement then used getActivity().
    _listView.setAdapter(myAdapted);


                    myAdapted.notifyDataSetChanged();