2016-12-08 2 views
0

ActivityFragment이 있습니다. 해당 조각에는 RecyclerViewRecyclerViewAdapter이 있습니다. 조각의 onCreate에서RecyccyClerViewAdapter 데이터를 작업 레크 리 에이션으로 유지하십시오.

나는이 일을 해요 :

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Log.d("TAGGG", "onCreate: "); 
    // Database handler 
    Contract.DbHelper dbHelper = new Contract.DbHelper(getContext()); 
    dERecyclerViewAdapter.setEntries(dbHelper.readAllEntries()); 
} 

Activity가 재 작성됩니다 매번 (최대 탐색, 회전 변경) 데이터가 데이터베이스에서 다시 읽어되고있다. 올바른 저장 방법은 무엇입니까?

+0

를 사용하여 별도의 싱글 톤 클래스를 참조 싱글 클래스에서 그것을 얻을이 활동 휴양에 목록을 저장합니다. –

+2

onRestoreInstanceState() 및 onSaveInstanceState() 메서드를 사용하여 구성 변경에 대한 데이터를 저장할 수 있습니다. 그리고 단편 대신에 새로운 단편을 교체하는 대신 스택에 추가하면 이전 단편 상태가 유지됩니다. – bindal

+0

싱글 톤 클래스가 유혹에 빠졌지 만 변경 사항을 전파해야합니다. 3 곳 : db, 어댑터 및 싱글 톤 클래스. @bindal 하지만 필자의 목록 개체에는 필드가 많아서 parcellable을 만들면 지옥이 될 수 있습니다. – justmatt

답변

0

savedInstanceState를 사용하여 번들을 통해 데이터를 저장할 수 있습니다. 이

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    //Use the bundle to store data 
} 

처럼 저장하고이 도움이

@Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
if(savedInstanceState!=null) 
    { 
     //Use the savedInstanceState to get the stored result 
    } 
} 

희망처럼 검색 할 수 있습니다!

0

CursorLoader 클래스를 확인해야합니다. 귀하의 상황은이 수업이 의도 한 바입니다.

onCreate을 호출 할 때 로더가 이미 쿼리를 수행 한 경우 데이터베이스를 다시 쿼리하지 않고 이미 읽은 데이터 만 제공하므로 로더 자체가 구성 변경 사이에 유지 될 수 있습니다.

https://developer.android.com/guide/components/loaders.html

또한 http://www.androiddesignpatterns.com/2012/07/understanding-loadermanager.html

관련 문제