![](/img/trans.png)
[英]How to attach() and detach() instead of add() and remove() to save fragment view
[英]Fragment detach() and attach() doesn't update view
我的應用程序中有一個導航抽屜,並且想要將菜單中的TextView
從“登錄”(當沒有用戶登錄時)更改為“我的帳戶”(當用戶登錄時)。 我使用attach()
和detach()
方法重新加載片段。 但是,該視圖似乎沒有更新。 使用日志,我已經驗證了這段代碼可以正確執行。
這是當我單擊注銷時發生的onClick
動作,這似乎成功注銷了我的用戶。 SharedPrefs
是用於管理SharedPreferences
的類。 deletePrefs()
方法效果很好,因為如果我按注銷並重新啟動應用程序,則用戶將成功注銷。
case 2:
SharedPrefs.deletePrefs(getContext());
closeDrawer();
NavigationDrawerFragment mNavigationDrawerFragment = MainActivity.getNavigationDrawerFragment();
mNavigationDrawerFragment.setUserData("", "", BitmapFactory.decodeResource(getResources(), R.drawable.avatar));
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.detach(this).attach(this).commit();
Log.d("Fragment", "detach, attach");
break;
這是構建菜單的方法。 在我的Fragment的onCreateView()
方法中調用它。
public List<NavigationItem> getMenu() {
items = new ArrayList<NavigationItem>();
items.add(new NavigationItem("Home", getResources().getDrawable(R.drawable.ic_home)));
if (!SharedPrefs.isLogin(getContext()))
items.add(new NavigationItem("Login", getResources().getDrawable(R.drawable.ic_login)));
else
items.add(new NavigationItem("My Account", getResources().getDrawable(R.drawable.ic_my_account)));
items.add(new NavigationItem("Logout", getResources().getDrawable(R.drawable.ic_logout)));
return items;
}
分離和附加時,是否不會再次執行onCreateView()
? 因此,應該重建菜單,並更改TextView
,對嗎?
編輯:因此使用日志,我看到分離和重新附加時,不會再次調用onCreateView()
方法。 這正常嗎? 還是我以錯誤的方式分離並重新連接?
使用片段更新時,我也遇到了同樣的問題。 我這樣修復:
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.detach(this).attach(this).commitAllowingStateLoss();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.