繁体   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