簡體   English   中英

方向更改時處理SQLiteOpenHelper

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM