如何在Android应用中保存特定片段状态

时间:2018-07-12 22:35:54

标签: android fragment drawer

我正在使用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;
}

致谢!

2 个答案:

答案 0 :(得分:0)

据我了解,您的问题是,一旦您从当前片段返回到先前的片段,先前的片段的状态便是初始状态,并且无法反映出用户上次显示时它是如何配置的,对吗?

在这种情况下,您可以做的是使用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初始化控件,那么我什至不必求助于上述技巧。我还没有找到一种方法来抓取片段并自动保存其状态。您需要自己做腿部锻炼。祝好运! :)

答案 1 :(得分:0)

您创建一个变量,并为其分配MapFragment实例。您只需实例化一次,然后像

一样重用变量
public function index($username, $post_id)
{
   echo $username;
   echo $post_id;
}

这对您有用吗?