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