我正在使用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;
}
致谢!
答案 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;
}
这对您有用吗?