나는 해결할 수없는 버그로 시장에 응용 프로그램을 가지고 있습니다. 오늘 나는 아래의 방법으로 그것을 추적했다.ListView는 어댑터에 항목이 추가 되더라도 비어 있습니다. 응용 프로그램 재개시 언젠가
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());
}
이 방법은 인터넷에서 끌어온 거래 객체의 arraylist를 전달합니다. 응용 프로그램을 처음 열면 인터넷에서 데이터가 추출되고 위의 메서드가 호출되어 ListFragment에 대해 설정된 새 어댑터가 만들어집니다. 이 메소드는 사용자가 더 많은 거래를 요청할 때도 호출됩니다.
내가 겪고있는 문제는 목록이 가끔 거래가 들어있는 어댑터를 비어있는 것으로 생각한다는 것입니다. 이것은 장치의 메모리가 부족할 때 응용 프로그램을 다시 시작할 때 발생합니다 (응용 프로그램의 일부가 RAM에서 제거되었다고 가정 함). 이 메서드가 호출되고 dealListAdapter가 null이므로 새 것이 만들어지고 거래가 추가됩니다. 이러한 일이 발생 했음에도 불구하고 목록은 비어 있고 사용자는 앱을 다시 작동 시키려면 앱을 닫아야합니다.
아래 줄은 메소드가 호출 될 때 tat를 표시하고 if를 입력하면 21 개가 어댑터에 추가됩니다. 불행하게도이 목록은 사용자에게 비어 있습니다.
05-23 01:52:32.879: D/UPDATE_DEAL_LIST(3478): Notified list created new21
추가 코드가 도움이되는지 알려주십시오. – bencallis
어댑터를 작성한 후 어댑터를 지우고 거래 배열에서 모든 항목을 추가하십시오. 이 배열을 어떻게 저장하고 있습니까? 클래스의 멤버 변수 인 경우 시스템에서 활동을 종료하면 유지되지 않습니다. 활동 상태가 일시 중지되거나 중지되었을 때 저장합니까? http://developer.android.com/guide/topics/fundamentals/activities.html#SavingActivityState –
메서드의 if 본문에있는 경우 끝에 반환되므로 어댑터가 즉시 지워지지 않습니다. 어댑터는 ListFragment 클래스에 인스턴스 변수로 저장됩니다. ArrayList 자체는 자주 변경되므로 저장되지 않습니다. 현재 상태가 저장되지 않았습니다. 살해 된 후에 앱을 다시 시작하면 문제가 발생하는 것 같습니다. 안드로이드는 처음부터 앱을 시작하는 것과는 대조적으로 시스템이 시스템을 죽인 후 앱을 다시 시작하면 어떻게됩니까? – bencallis