为了账号安全,请及时绑定邮箱和手机立即绑定

fragment相互切换

底部的四个按钮,其中一个按钮对应的fragment有editview,修改其中内容,切换另一个fragment再切换回来的时候editview的内容清空了,要怎么解决?

正在回答

3 回答

@Bind(R.id.mRb_server)
RadioButton mRbServer;
@Bind(R.id.mRb_wx)
RadioButton mRbWx;
@Bind(R.id.mRb_girl)
RadioButton mRbGirl;
@Bind(R.id.mRb_person)
RadioButton mRbPerson;
@Bind(R.id.rl_container)
FrameLayout rlContainer;
@Bind(R.id.rg_buttom)
RadioGroup rgButtom;
private BaseFragment mFragmentServer,mFragmentWx,mFragmentGirl,mFragmentPerson,currentFragment;

@Override
public int getLayoutId() {
   logUtils.logD("getLayoutId","getLayoutId");
   return R.layout.activity_main;
}

@Override
public void initView() {
   logUtils.logD("initView","initView");
   setListener();
}

private void setListener() {
   rgButtom.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
       @Override
       public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) {
           handleOnClick(checkedId);
       }
   });
}

private void handleOnClick(int checkedId) {
   switch (checkedId){
       case R.id.mRb_server :
           switchFragment(mFragmentServer);
           break;

       case R.id.mRb_wx :
           switchFragment(mFragmentWx);
           break;
       case R.id.mRb_girl :
           switchFragment(mFragmentGirl);
           break;
       case R.id.mRb_person :
           switchFragment(mFragmentPerson);
           break;
       default:
           break;
   }
}
private void switchFragment(BaseFragment fragment){
   FragmentTransaction tran = getSupportFragmentManager().beginTransaction();
   tran.show(fragment);
   tran.hide(currentFragment);
   tran.commit();
   currentFragment=fragment;

}



@Override
public void initData() {
   mFragmentServer=new Fragment_Server_Manager();
   mFragmentWx=new Fragment_Wx_Selected();
   mFragmentGirl=new Fragment_Girl();
   mFragmentPerson=new Fragment_Personnal();
   FragmentTransaction tran = getSupportFragmentManager().beginTransaction();
   tran.add(R.id.rl_container,mFragmentServer);
   tran.add(R.id.rl_container,mFragmentWx).hide(mFragmentWx);
   tran.add(R.id.rl_container,mFragmentGirl).hide(mFragmentGirl);
   tran.add(R.id.rl_container,mFragmentPerson).hide(mFragmentPerson);
   currentFragment=mFragmentServer;
   tran.commit();


}

1 回复 有任何疑惑可以回复我~
#1

慕无忌0017105 提问者

谢谢这么麻烦为我解答!万分感谢
2018-03-09 回复 有任何疑惑可以回复我~

使用预加载模式:

1:每个frament的的对象提前创建好,并初始化并且初始化一个currentFragment记录当前显示的fragment对象;

2:创建事务管理器将所有的fragment全部add()进去,隐藏你不想展示的,commit();

3: 切换部分,因为之前每个fragment都加载进去了,就是show()和hide()的问题了,隐藏之前显示的,显示要显示的;

4:数据更新重写 onHiddenChanged(),进行每次切换的更新;

1 回复 有任何疑惑可以回复我~

请检查fragment切换的时候使用的是add()(是重新创建fragment,导致edittext清空)还是replace()(这个不是重新创建,使用之前的);

0 回复 有任何疑惑可以回复我~
#1

慕无忌0017105 提问者

我是先使用hide()再使用add()(加入回退栈),这样会导致两个fragment重叠在一起。这要怎么解决
2018-02-24 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Fragment应用上
  • 参与学习       11066    人
  • 解答问题       17    个

在项目中,灵活使用Fragment做视图组装,开销比Activity更小。

进入课程

fragment相互切换

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信