
我有一个导航视图,其中包含一些项,当按下一项时,它将转到该片段.例如,如果您按下抽屉上的“主页”项,它将d出主页片段.
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; } } }因此,我认为正在发生的事情是,当我使用replace()方法时,它正在破坏聊天片段.如果我有关于聊天片段的数据,并且我想确保在更改片段时数据不会消失,该怎么办.
在ChatFragment类中,我放置了此重写方法:
@OverrIDepublic 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}现在,当我在应用程序中的片段之间切换时,不会调用此方法,这意味着片段已被销毁.
有没有一种替代方法,我可以将屏幕上的当前片段与所需的片段交换(而不破坏两者)?
我将有更多的片段(最多十个),是否有不需要重复代码的优化解决方案?
解决方法:
您要用其他片段替换片段,因此第一个片段会被破坏.如果您不想破坏它,则需要添加它而不是替换它
fragmentTransaction.add(R.ID.Main, homeFragment, "Home"); 总结 以上是内存溢出为你收集整理的android-如何阻止我的片段被破坏?全部内容,希望文章能够帮你解决android-如何阻止我的片段被破坏?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)