我正在阅读并在ListView
中从3个不同的xml提要中添加数据,提取过程运行三次以执行三个不同的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。但是,如果列表视图中添加了所有三个Feed的数据,我想在ArrayList
中添加另一个ListView
数据。
这意味着我想在加载所有Feed时添加数据,因此我添加了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
中。我首先想到的数据没有添加到fetchedData
的{{1}}数组中,但事实并非如此,因为数据已在test.secondaryArray
数组中成功添加,但适配器未更新。
这是我完整的inPostExecute代码,
fetchedData
为什么在加载所有Feed后添加新数据后我的lsitview没有更新?
编辑:如果我在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();
}
块之外做同样的事情那么它正在工作但是在块内没有工作,但这不是我想要的,因为我希望这个代码只在所有的源码都是在此之前添加。
答案 0 :(得分:1)
一种可能性是,第一次调用此方法时,您尝试使用MainThread(UIThread)通知listview,在第二种情况下(if条件变为true),您使用后台线程通知列表视图。
答案 1 :(得分:0)
如果之前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);