[英]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.