我在市场上有一个应用程序有一个我似乎无法解决的错误。今天我把它追踪到了下面的方法。
public void updateDealList(ArrayList<Deal> deals) {
// first call or showing bookmakrs (also gets called other times when adapter is null)
if (dealListAdapter == null || showingBookmarks || !dealListAdapter.moreDealsToDownload()) {
dealListAdapter = new EndlessDealListAdapter(getActivity(),
R.layout.deal_list_item, deals);
setListAdapter(dealListAdapter);
listView = getListView();
if (getActivity().findViewById(R.id.right_fragment_container)!=null){ // if tablet
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
listView.setVerticalScrollbarPosition(View.SCROLLBAR_POSITION_LEFT);
}
showingBookmarks=false;
Log.d("UPDATE_DEAL_LIST", "Notified list created new" + dealListAdapter.getCount());
return; //PROBLEM OCCURS WHEN APP COMES IN HERE AFTER RESUMING
}
dealListAdapter.getDealListAdapter().clear();
for (Deal d: deals){
dealListAdapter.getDealListAdapter().add(d);
Log.d("UPDATE_DEAL_LIST", "added " + d.title);
}
dealListAdapter.notifyDataSetChanged();
Log.d("UPDATE_DEAL_LIST", "Notified list " + dealListAdapter.getCount());
}
此方法传递一个从 Internet 下拉的交易对象的数组列表。当应用程序第一次打开时,从互联网上提取数据并调用上述方法,该方法会创建一个为 ListFragment 设置的新适配器。当用户请求更多交易时,也会调用此方法。
我遇到的问题是列表有时认为它是空的,尽管适配器包含交易。当用户在设备内存不足时恢复应用程序时,这似乎会发生(我认为应用程序的一部分已从 ram 中删除)。调用此方法并且 dealListAdapter 为空,因此创建了一个新方法并添加了交易。尽管发生这种情况,列表仍然是空的,用户必须强制关闭应用程序才能让它再次工作。
下面的行显示了当方法被调用时它进入 if 并且 21 个交易被添加到适配器。不幸的是,该列表对用户来说是空的。
05-23 01:52:32.879: D/UPDATE_DEAL_LIST(3478): Notified list created new21