내 앱의 기본 피드로 조각을 만들었습니다. 목록 데이터 (ArrayList)는 기본 활동에서 Activity가 구현하는 조각의 내부 인터페이스를 통해로드됩니다.안드로이드 전화를 돌릴 때 단편의 맞춤 목록보기가 나타납니다
내 문제 :
- 나는 드 전화를 회전 할 때 바로 표시됩니다 내 사용자 정의 목록보기.
- 회전 할 때 OnCreateView 및 OnActivityCreate가 두 번 호출됩니다. 내가 전화를 회전하고 난에 클릭 한 후 ListView에가 표시되면
- , 난 다음 오류가 발생합니다 :
java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. Make sure your adapter calls notifyDataSetChanged() when its content changes. [in ListView(2131034209, class android.widget.ListView) with Adapter(class com.fb.newcomersapp.CustomListAdapter)]
:
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
listView = (ListView) getView().findViewById(R.id.event_list_view);
mCallback.parseQueryEvents();
ArrayList<Event> eventList = mCallback.getEventList();
Log.d("FeedActivity", eventList.size()+"");
CustomListAdapter adapter = new CustomListAdapter(getActivity(), eventList);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
mCallback.openEvent(position);
}
});
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View view = inflater.inflate(R.layout.fragment_feed, container, false);
textView = (TextView) view.findViewById(R.id.tv_header);
textView.setText(mCallback.getLocal());
return view;
}
주요 활동 방법 :
public void parseQueryEvents() {
eventList = new ArrayList<Event>();
ParseQuery<ParseObject> query = ParseQuery.getQuery("Event");
query.orderByAscending("startDate") ;
query.whereGreaterThanOrEqualTo("endDate", new Date()) ;
query.findInBackground(new FindCallback<ParseObject>() {
public void done(List<ParseObject> parseEventList, ParseException e) {
if (e == null) {
ParseObject temp ;
Iterator<ParseObject> i = parseEventList.iterator() ;
while(i.hasNext()) {
temp = i.next();
eventList.add(new Event(temp)) ;
}
} else {
Log.d("FeedActivity", e.getMessage());
}
}
});
}
public ArrayList<Event> getEventList() {
// TODO Auto-generated method stub
return eventList;
}
로그 :
02-04 13:36:06.844: D/GPS(7237): GPS 02-04 13:36:07.110: D/FeedActivity(7237): 0 02-04 13:36:07.145: D/GPS(7237): GPS 02-04 13:36:07.409: D/FeedActivity(7237): 0 02-04 13:36:07.420: I/Choreographer(7237): Skipped 39 frames! The application may be doing too much work on its main thread. 02-04 13:36:07.451: W/View(7237): requestLayout() improperly called by android.widget.ListView{42079068 IFED.VC. ......ID -360,0-0,778 #7f050041 app:id/list_slidermenu} during layout: running second layout pass
누구든지 나를 도울 수 있습니까? Thx : D
onCreate()의 ListAdapter에서'notifyDataSetChanged()'메소드를 호출 하시겠습니까? –
@joaquin 아니요,하지만 Acvitivity의 onCreate 또는 Fragment의 onActivityCreated에 있습니까? 매개 변수로 어댑터를 사용하여 notifyDateSetChanged를 호출해야합니다. – Natanael
각 조각의 onCreateView에 넣으십시오. –