課程
/移動開發
/Android
/Fragment應用上
底部的四個按鈕,其中一個按鈕對應的fragment有editview,修改其中內容,切換另一個fragment再切換回來的時候editview的內容清空了,要怎么解決?
2018-02-09
源自:Fragment應用上 3-1
正在回答
@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;@Overridepublic int getLayoutId() { ? ?logUtils.logD("getLayoutId","getLayoutId"); ? ?return R.layout.activity_main;}@Overridepublic 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;}@Overridepublic 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();}
慕無忌0017105 提問者
使用預加載模式:
1:每個frament的的對象提前創建好,并初始化并且初始化一個currentFragment記錄當前顯示的fragment對象;
2:創建事務管理器將所有的fragment全部add()進去,隱藏你不想展示的,commit();
3: 切換部分,因為之前每個fragment都加載進去了,就是show()和hide()的問題了,隱藏之前顯示的,顯示要顯示的;
4:數據更新重寫?onHiddenChanged(),進行每次切換的更新;
請檢查fragment切換的時候使用的是add()(是重新創建fragment,導致edittext清空)還是replace()(這個不是重新創建,使用之前的);
舉報
在項目中,靈活使用Fragment做視圖組裝,開銷比Activity更小。
1 回答fragment的轉換問題
1 回答fragment和viewpager怎么結合使用?
1 回答動態載入的fragment布局中的textView內容為什么會在到頂部
1 回答點擊沒有替換 怎么回事呀
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2018-03-09
@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();
}
2018-03-09
使用預加載模式:
1:每個frament的的對象提前創建好,并初始化并且初始化一個currentFragment記錄當前顯示的fragment對象;
2:創建事務管理器將所有的fragment全部add()進去,隱藏你不想展示的,commit();
3: 切換部分,因為之前每個fragment都加載進去了,就是show()和hide()的問題了,隱藏之前顯示的,顯示要顯示的;
4:數據更新重寫?onHiddenChanged(),進行每次切換的更新;
2018-02-23
請檢查fragment切換的時候使用的是add()(是重新創建fragment,導致edittext清空)還是replace()(這個不是重新創建,使用之前的);