2013-10-05 18 views
7

私は自分のアクティビティで2つのフラグメントを使用しています。最初にそのフラグメントをアクティビティに追加します。私は理解したとおりに努力しましたが、それは置き換えていません。両方のフラグメントが重なっていることを示しています。 最初のフラグメントのリスナーを使用して1つのフラグメントを別のフラグメントに置き換える方法

Here is my code: 

// MainActivity 


public class MainActivity extends Activity { 
    Fragment Fragment_one; 
    Button one; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     //one=(Button) findViewById(R.id.button1); 
     //one.setOnClickListener(new View.OnClickListener() { 

      //@Override 
      //public void onClick(View arg0) { 
       // TODO Auto-generated method stub 
       FragmentManager man=getFragmentManager(); 
       FragmentTransaction tran=man.beginTransaction(); 
       Fragment_one=new Fragment1(); 
       tran.add(R.id.fragment_container, Fragment_one);//tran. 
       tran.addToBackStack(null); 
       tran.commit(); 

      //} 
     //}); 

    } 


} 
//fragment code 

public class Fragment1 extends Fragment{ 
    Button add; 
    Fragment2 fragment_two; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     //return super.onCreateView(inflater, container, savedInstanceState); 

     View view=inflater.inflate(R.layout.fragment_1, container,false); 
     add=(Button) view.findViewById(R.id.button1); 
     fragment_two =new Fragment2(); 
     add.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       FragmentTransaction t=getActivity().getFragmentManager().beginTransaction(); 
       t.remove(new Fragment1()); 

       t.replace(R.id.fragment1, fragment_two);t.addToBackStack(null); 
    t.commit(); 
       //t.addToBackStack(null); 

      } 
     }); 


     return view; 
    } 
} 

output screen

+0

なぜ両方のフラグメントを膨張させ、リスナーを使用して可視性を切り替えるのはなぜですか? – brbaker

+1

トグルする方法を教えてもらえますか?@brbaker –

+0

1)あなたのfragment2 xmlでは、可視性をGONEに設定します。 2)fragment1ボタンを押すと、findViewById()。setVisibility(android.view.View.GONE)とfindViewById()が呼び出されます。setVisibility(android.view.View.VISIBLE – brbaker

答えて

6

私はあなたのコード内で参照物事のカップル。

t.remove(new Fragment1()); 

あなたがFragment1の新しいインスタンスではなく、あなたが最初に追加インスタンスを削除しようとしているので、このコード行は、何もしません。

t.replace(R.id.fragment1, fragment_two) 

この最初のパラメータは、コンテナ「R.id.fragment_container」ないR.id.fragment1のIDでなければなりません。

t.addToBackStack(null); 

このコードは、またはあなたは、ユーザーが、彼らはfragment2に到着した後、バックfragment_oneに行くための「戻る」ボタンを押すことを可能にするかどうかに基づいて必要とされない場合があります。

+0

@lo thanks。 –

1

- 両方のフラグメントを膨張させ、リスナーを使用して可視性を切り替えるのはなぜですか? - brbaker

  • あなたはどのように切り替えるために私を助けることができる@brbaker? - 乗馬洞窟

インターフェイスを追加し、活動やオーバーライドメソッドに実装します。その後、onClickListenerを追加し、interfaceにtriggerメソッドを設定します。次にフラグメントマネージャを使用して、必要に応じてフラグメント上でshow()およびhide()トランザクションを実行します。 。

http://developer.android.com/reference/android/app/FragmentTransaction.html

ショー(フラグメント断片)は、以前に隠された断片を-Shows。

hide(フラグメントフラグメント) - 既存のフラグメントを隠します。

1

断片化されたxmlファイルでこのコード行を使用し、1日を保存します。 この行を親とすべてのレイアウトフラグメントxmlファイルに追加してください。

android:background="?android:windowBackground" 
関連する問題