アプリケーションにナビゲーションドロワーがあり、メニューのTextView
をログイン(ユーザーがログインしていないとき)からMy Accountログイン)。私はattach()
とdetach()
メソッドを使用してフラグメントをリロードします。しかし、ビューは更新されていないようです。ログを使用して、コードの一部が正しく実行されることを確認しました。フラグメントdetach()とattach()でビューが更新されない
ここでは、ログアウトをクリックしたときに発生する、ユーザーのログアウトに成功したと思われるアクションがあります(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;
ここに、メニューを構築する方法があります。私の断片の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
は変更されるはずです。
EDIT:ログを使用しているため、取り外しと再接続時にonCreateView()
メソッドが再度呼び出されないことがわかります。これは正常ですか?あるいは、私は切り離して間違ったやり方でやり直していますか?
なぜonCreateViewをもう一度実行するのですか?フラグメントビューは既に作成されています。 – cyroxis
@cyroxisフラグメントを切り離して添付するとViewが再作成されるため、onCreateViewが再び呼び出されるためです。それは正しいのではないですか? – user3484582