簡體   English   中英

片段detach()和attach()不會更新視圖

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM