2016-05-25 5 views
1

アプリケーションにナビゲーションドロワーがあり、メニューの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()メソッドが再度呼び出されないことがわかります。これは正常ですか?あるいは、私は切り離して間違ったやり方でやり直していますか?

+0

なぜonCreateViewをもう一度実行するのですか?フラグメントビューは既に作成されています。 – cyroxis

+1

@cyroxisフラグメントを切り離して添付するとViewが再作成されるため、onCreateViewが再び呼び出されるためです。それは正しいのではないですか? – user3484582

答えて

0

フラグメントアップデートを使用しているときも同じ問題が発生しました。私は次のように修正しました:

FragmentTransaction ft = getFragmentManager().beginTransaction(); 
ft.detach(this).attach(this).commitAllowingStateLoss(); 
関連する問題