2013-03-16 77 views
3

我嘗試創建的應用程序是ViewPager,然後由Fragments組成。方向更改時處理SQLiteOpenHelper

每個Fragment有不同的數據,因爲它從Database得到它。

我在FragmentStatePagerAdapter的內部發送從Fragment ActivityFragment的數據庫類。

下面是代碼:

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是數據庫類。

我打開我的mDbStudentonCreate

而且我閉上mDbStudentonDestroy

我的問題是,當方向的變化,mDbStudent被摧毀 但fragment仍然加載來自數據庫的數據,因此發生錯誤。

我試圖讓mDbStudent在FragmentonAttach,但是當我移動網頁速度非常快,其記錄說我沒有關閉mDbStudent

我的問題是是否有辦法在方向更改時處理mDbStudent

回答

0

您需要在活動外實例化您的數據庫。很可能,您將在很多活動和片段中使用數據庫,對吧?您可以創建一個靜態單,像這樣:

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()... 

此存儲應用程序的內容,讓您可以在需要等。無論訪問,在全局實例...即使該活動已被銷燬。

這也將允許您打開數據庫一次並保持打開狀態,即使通過方向更改。在我的應用程序中,我通常將數據庫保持打開狀態,直到應用程序明確關閉。如果您有一個單一活動應用程序,我會打開數據庫(如果已關閉),請在onStart中打開數據庫,然後在onUserLeaveHint()關閉它。這隻會關閉數據庫,如果使用離開應用程序,但不會改變方向。

+0

感謝您的回答,我認爲我對'Context'沒有任何問題。我的問題是什麼時候關閉並打開'mDbStudent'。你知道如何處理它嗎? – Sieryuu 2013-03-16 02:12:02

+0

修正答案。 'onUserLeaveHint()'適用於此。 – 323go 2013-03-16 02:18:39

+0

謝謝,但我打開我的數據庫onCreate,當方向改變時它會再次打開。如何解決它?因爲如果它打開兩次logcat將出現我永遠不會關閉數據庫 – Sieryuu 2013-03-16 02:23:42