2017-10-27 2 views
-1

私は似たような疑問を多く見ましたが、私のメインアクティビティのコンテナレイアウト(FrameLayout)をそのコンテナに表示されているフラグメントから置き換えることができません。
これは私がやろうとしていることです。私はナビゲーション・ドロワーとメイン・アクティビティを持っています。ナビゲーション・ドロワー・アイテムのクリックで、私はそれに応じてフラグメントを変更しています。これらのフラグメントは、ログイン、登録、カテゴリ、お問い合わせなどです。FragmentManagerFragmentTransactionでフラグメントを交換/置き換えています。すべての私の断片extends Fragmentとして正常に動作している親レイアウトのフラグメントを子から置き換える方法

public void changeFragment(int position) { 
     FragmentManager manager = getSupportFragmentManager(); 
     FragmentTransaction transaction = manager.beginTransaction(); 
     Fragment fragment = new Fragment(); 
     BlankFragment blankFragment = new BlankFragment(); 

     switch (position) { 
      case 0: 
       fragment = new FragMain(); 
       break; 
      case 1: 
       fragment = new FragPrivacyPolicy(); 
       break; 
      case 2: 
       fragment = new SettingsFragment(); 
       break; 
      case 101: 
       fragment = new FragLogin(); 
       break; 
      case 102: 
       fragment = new FragRegister(); 
       break; 
      case 103: 
       fragment = new FragEditAccount(); 
       break; 
      case 104: 
       fragment = new FragOrderHistory(); 
       break; 
      case 105: 
       fragment = new FragForgotPass(); 
       break; 
      case 106: 
       fragment = new FragOrderDetail(); 
       break; 
      case 108: 
       fragment = new FragAboutUs(); 
       break; 
      case 109: 
       fragment = new FragContactUs(); 
       break; 
      case 110: 
       fragment = new FragMain(); 
       break; 
     } 

     transaction.replace(R.id.flFragments, fragment); 
     transaction.commit(); 
    } 

以下のコードを確認してください。この問題は、このmainActivityのコンテナに表示されているフラグメントの1つでこのメソッドを呼び出そうとしたときに発生します。 FragLoginというテキストビューで「アカウントを持っていません」というメッセージが表示された場合は、このテキストをクリックしてください。FragRegisterをmainActivityの同じコンテナに開く必要があります。私は私のFragLoginアプリケーションでこのようにそれを行うとtransaction.commit();

MainActivity activity = new MainActivity(); 
activity.changeFragment(102); 

を指してクラッシュし、私はこの

FragRegister fragRegister = new FragRegister(); 
// Fragment fragRegister = new FragRegister(); 
    FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); 
    transaction.addToBackStack(null); 
    transaction.replace(R.Id.flFragments, fragRegister).commit(); 

ようにしようとすると、それはmainActivity内にないFragLoginにそのようR.Id.flFragmentsを認識しません。

したがって、FragRegisterのmainActivityのコンテナでそのFragRegisterを置き換えることはできますか?

答えて

2

getChildFragmentManager()はフラグメントマネージャに属し、現在のフラグメントを保持しているコンテナはアクティビティコンテナです。代わりにgetSupportFragmentManager()を使用してください。

はまた、このstament

MainActivity activity = new MainActivity(); 
activity.changeFragment(102); 

あなたはcreated.YouがgetActivity()は.callこのようなchangeFragment方法を使用してフラグメントからアクティビティメソッドを呼び出す必要があり、すでにあるmainactivityの新しいオブジェクトを作成しているを参照します。

((MainActivity)getActivity()).changeFragment(102); 
+0

「getActivity()」では両方のメソッドがうまく機能しています。 –

+0

あなたの一番ようこそ。私の答えが助けてくれたら助かりました:) – Anonymous

+0

答えを受け入れるのに時間制限があるので私はアップしました。今でも受け入れられている。 –

関連する問題