亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

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應用上
  • 參與學習       11080    人
  • 解答問題       17    個

在項目中,靈活使用Fragment做視圖組裝,開銷比Activity更小。

進入課程

fragment相互切換

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號