[英]Handle SQLiteOpenHelper when orientation changes
我嘗試創建的應用程序是ViewPager
然后由Fragments
組成。
每個Fragment
都有不同的數據,因為它來自Database
。
我將Fragment Activity
的Database類發送到Fragment
內的FragmentStatePagerAdapter
。
這是代碼:
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
public ScreenSlidePagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return PageFragment.create(position, student, getApplicationContext(), mDbStudent);
}
@Override
public int getCount() {
return NUM_PAGES;
}
}
mDbStudent是Database類。
我在onCreate
打開我的mDbStudent
然后我在onDestroy
時關閉我的mDbStudent
我遇到的問題是當方向改變時, mDbStudent
被銷毀但fragment
仍然從數據庫加載數據,因此發生錯誤。
我試着在onAttach上獲取Fragment
onAttach
,但是當我快速移動頁面時,日志聲明我沒有關閉mDbStudent
我的問題是 ,當方向改變時,有沒有辦法處理mDbStudent ?
您需要在Activity之外實例化數據庫。 最有可能的是,你將在許多活動和片段中使用數據庫,對吧? 您可以創建一個靜態單例,如下所示:
public class Global {
private static Global instance = null;
private Context context;
public Global( Context context ) {
this.context = context.getApplicationContext();
}
public static getInstance( Context context ) {
if( instance == null )
instance = new Global( context );
return instance;
}
public SQLiteOpenHelper getDatabase() {
return ... ;
}
}
然后,在您的活動中,您可以致電:
Global.getInstance( this ).getDatabase()...
這將存儲應用程序的Context,因此您可以在需要的時候在Global實例中訪問它...即使Activity已被銷毀。
這也允許您打開數據庫一次並保持打開狀態,即使通過方向更改也是如此。 在我的應用程序中,我通常會將數據庫保持打開狀態,直到應用程序顯式關閉 如果您有一個單活動應用程序,我會在onStart
打開數據庫(如果已關閉),並在onUserLeaveHint()
關閉它。 這只會在用戶離開應用程序時關閉數據庫,但不會在方向更改時關閉。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.