繁体   English   中英

添加数据时notifyDataSetChanged()不更新列表视图

[英]notifyDataSetChanged() not updating list view when adding data

我正在从3个不同的xml提要中读取数据并在ListView添加数据,因此获取过程运行三次以执行三个不同的asynctasks。

这是我的onPostExecute代码,

if (fetchedData.isEmpty())
    fetchedData = result;
else 
    fetchedData.addAll(result);

if (sAdapter == null) {
    sAdapter = new SpecialAdapter(myapp.this, fetchedData,android.R.layout.simple_list_item_2, keys, ids);
    setListAdapter(sAdapter);
} else {
    sAdapter.notifyDataSetChanged();
}

在上面的代码中, fetchedData是一个ArrayList

上面的代码可以正常工作并更新所有3个feed的listView。 但是,一旦所有三个提要的数据添加到listView中,我想在ListView添加另一个ArrayList数据。

这意味着如果所有提要都已加载,我想添加数据,所以我添加了if块,

if (//all feeds added in the list) {
    Log.e("added","feeds added");
    // add another ArrayList in my ListView here 
    // and update the List adapter
}

这是上述if块的实际代码,

if (count == feeds.length) {

    Log.e("added","feeds added");
    //adding another arrayList in list view ArrayList
    fetchedData.addAll(test.secondryArray);
    // checking if it is added  (it is added successfully
    Log.e("size of fetchedData",fetchedData.size + "");
    // update the adapter
    sAdapter.notifyDataSetChanged();
}

if块中,我在列表视图数组列表中添加了一个新的arraylist并更新了SimpleAdapter ,但是由于某种原因数据没有显示在ListView中。 我首先认为数据没有从test.secondaryArray添加到fetchedData数组中,但这不是真的,因为数据已成功添加到fetchedData数组中,但适配器未更新。

这是我完整的inPostExecute代码,

if (fetchedData.isEmpty())
    fetchedData = result;
else 
    fetchedData.addAll(result);

String[] keys = { GetFeeds.KEY_TITLE, GetFeeds.KEY_DATE};
int[] ids = { android.R.id.text1, android.R.id.text2 };

// KEY_TITLE = text1
// KEY_DATE  = text2

if (sAdapter == null) {
    sAdapter = new SpecialAdapter(myapp.this, fetchedData,android.R.layout.simple_list_item_2, keys, ids);
    setListAdapter(sAdapter);
} else {
    sAdapter.notifyDataSetChanged();
}

if (count == feeds.length) {
    Log.e("added","feeds added");
    //adding another arrayList in list view ArrayList
    fetchedData.addAll(test.secondryArray);
    // checking if it is added  (it is added successfully
    Log.e("size of fetchedData",fetchedData.size + "");
    // update the adapter
    sAdapter.notifyDataSetChanged();
}

在加载所有提要后添加新数据后,为什么我的lsitview没有得到更新?

编辑:如果我在if块外执行相同的操作,则它正在工作,但在if块内却不工作,但这不是我想要的,因为我希望仅在所有提要都未添加之前执行此代码。

一种可能是,第一次调用此方法时,您尝试使用MainThread(UIThread)通知列表视图,而在第二种情况(如果条件变为true)中,则使用后台线程来通知列表视图。

当您以前的ListView没有数据时,就会发生这种情况。 如果ListView为空,并且您在向其中添加数据后尝试执行notifyDataSetChanged()而不是初始化适配器,则ListView将保持为空。

因此,不要在适配器上使用notifyDataSetChanged() ,而应为第二个数组重新初始化它。

在你的街区

if (count == feeds.length) {
    Log.e("added","feeds added");
    //adding another arrayList in list view ArrayList
    fetchedData.addAll(test.secondryArray);
    // checking if it is added  (it is added successfully
    Log.e("size of fetchedData",fetchedData.size + "");
    // update the adapter
    sAdapter.notifyDataSetChanged();
}

更换,

sAdapter.notifyDataSetChanged();

用,

sAdapter = new SpecialAdapter(myapp.this, fetchedData,android.R.layout.simple_list_item_2, keys, ids);
setListAdapter(sAdapter);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM