Moy*_*nul 3 android android-fragments
我有一个导航视图,其中包含一些项目,当按下一个项目时,它将转到该片段。例如,如果您按下抽屉上的“主页”项,它会调出主页片段。
navigationView = (NavigationView)findViewById(R.id.navigation_view);
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.home_id:
HomeFragment homeFragment = (HomeFragment) fragmentManager.findFragmentByTag("Home");
if (homeFragment == null)
homeFragment = new HomeFragment();
fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.Main, homeFragment, "Home");
fragmentTransaction.commit();
getSupportActionBar().setTitle("Home");
item.setChecked(true);
drawerLayout.closeDrawers();
break;
case R.id.chat_id:
ChatFragment chatFragment = (ChatFragment) fragmentManager.findFragmentByTag("Chat");
if (chatFragment == null)
chatFragment = new ChatFragment();
fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.Main, chatFragment, "Chat");
fragmentTransaction.commit();
getSupportActionBar().setTitle("Chat");
item.setChecked(true);
drawerLayout.closeDrawers();
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以我认为正在发生的是,当我使用该replace()方法时,它正在破坏聊天片段。如果我有关于聊天片段的数据,并且我想确保更改片段时数据不会消失怎么办。
在ChatFragment类中,我放置了这个覆盖方法:
@Override
public void onSaveInstanceState(Bundle outState)
{
Log.d("CHATFRAG", "onSaveInstanceState: been called ");
super.onSaveInstanceState(outState);
outState.putString("textView",textView.getText().toString());
//Save the fragment's state here
}
Run Code Online (Sandbox Code Playgroud)
现在,当我在应用程序中的片段之间切换时,不会调用此方法,这意味着片段正在被销毁。
有没有替代方法可以将屏幕上的当前片段与所需的片段(不破坏两者)交换?我将拥有更多片段(最多 10 个),是否有不需要重复代码的优化解决方案?
你正在用其他替换片段,所以第一个会被破坏。如果你不想它破坏你需要add它而不是replace
fragmentTransaction.add(R.id.Main, homeFragment, "Home");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9889 次 |
| 最近记录: |