簡體   English   中英

如何在Android應用中保存特定片段狀態

[英]How to save specific fragment state in Android app

我正在使用Drawer Navigation開發一個應用程序,我想保存單個片段的狀態。 如果我從另一個片段切換到該片段,它將刷新,因此必須避免。 其他片段必須重新加載。 我能做什么? 這是我的代碼:

    @Override
public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    Fragment fragment = null;
    int id = item.getItemId();

    if (id == R.id.nav_places)
    {
        fragment = new Places();
    }
    else if (id == R.id.nav_map)
    {
        fragment = mapFragment; // fragment which I want to keep in memory
    }
    else if (id == R.id.nav_about)
    {
        fragment = new About();
    }

    FragmentManager fragmentManager = getSupportFragmentManager();
    fragmentManager.beginTransaction().replace(R.id.content_container, fragment).commit(); //NULL POINTER
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}

問候!

據我了解,您的問題是,一旦您從當前片段返回到先前的片段,先前的片段的狀態便是初始狀態,並且不能反映出用戶上次顯示它是如何配置的,對嗎?

在這種情況下,您可以做的是使用ViewPager顯示片段並手動刷新片段,從SharedPreferences或靜態類中讀取數據,如下所示:

// This works like onRefresh(), when the user returns to the fragment.
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) {
        ... RELOAD VARIABLES AND UPDATE YOUR FRAGMENT INTERFACE ...
    }
}

當然,在此之前,您需要將所有相關數據寫入SharedPreferences或靜態類。

總的來說,我發現,如果我正確設置了片段的onCreateView(),並使用SharedPreferences初始化了控件,那么我什至不必求助於上述技巧。 我還沒有找到一種方法來抓取片段並自動保存其狀態。 您需要自己做腿部鍛煉。 祝好運! :)

您創建一個變量並為其分配MapFragment實例。 您只需實例化一次,然后像

private Fragment mapFragment = new MapFragment();

...
else if (id == R.id.nav_map)
{
    fragment = mapFragment; 
}

這對您有用嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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