其他分享
首页 > 其他分享> > 我的适配器上的notifyDataSetChanged()无法更新列表视图,为什么?

我的适配器上的notifyDataSetChanged()无法更新列表视图,为什么?

作者:互联网

我有一个扩展listactivity的活动,在此类中扩展了我有一个扩展baseadapter的类.

现在在我的listactivity中,我有这个onCreate

 /** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {   
    super.onCreate(savedInstanceState);
    setListAdapter(new BuildingAdapter(this));

    final ProgressDialog loading = new ProgressDialog(this);
    loading.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    loading.setTitle("Laddar");
    loading.setMessage("Hämtar data från servern");
    loading.show();

    new AsyncTask<Void, Void, DataPacket.Data>()
    {
        @Override
        protected DataPacket.Data doInBackground(Void... params){
            return ServerConnection.getBuildings();
        }

        @Override
        protected void onPostExecute(DataPacket.Data param) {
            ((MainenanceApplication)getApplication()).setDataStructure(param);
            loading.dismiss();
            //((BuildingAdapter)getListAdapter()).notifyDataSetChanged();
            setListAdapter(new BuildingAdapter(BuildingSelectionActivity.this));
        }

    }.execute();
}

这可以按预期工作,但是我的问题在onPostExecute中,我更新了列表适配器使用的数据结构.
为什么我不能只调用notifyDataSetChanged?

如果我有那条线,则视图不会自动更新,但是如果我在setListAdapter所在的位置使用这条线,则一切正常.

解决方法:

如果已设置适配器,则再次设置将不会刷新列表视图.相反,首先检查listview是否具有适配器,然后调用适当的方法.

我认为在设置列表视图时创建适配器的新实例不是一个好主意.而是创建一个对象.

BuildingAdapter adapter = new BuildingAdapter(context);

    if(getListView().getAdapter() == null){ //Adapter not set yet.
     setListAdapter(adapter);
    }
    else{ //Already has an adapter
    adapter.notifyDataSetChanged();
    }

标签:listactivity,notify,android,listview,baseadapter
来源: https://codeday.me/bug/20191013/1910560.html