FragmentManager.findFragmentByIdは、『Fragmentを挿入している可能性のあるFrameLayoutなどのLayoutのID』からFragmentを見つけるためのメソッド。
FragmentManager | Android デベロッパー | Android Developers
普通、『FragmentのID』かとおもうけど、そうではない。
となると、複数の場合はどうなるかってなるんだけど、それは今回は扱わない。
strings.xmlで、
2つのFragmentそれぞれに置くTextViewのためのテキスト。
fragment1_main.xmlは、
TextViewだけ。
fragment2_main.xmlも、
TextViewだけ。
activity_main.xmlは、
Buttonに2つのFrameLayout。
Fragment1.javaは、
Viewを普通に生成。
Fragment2.javaも、
Viewを普通に生成。
あとは、MainActivity.javaで、
package com.bgstation0.android.sample.fragmentmanager_; import android.app.Activity; import android.app.Fragment; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Buttonの初期化. Button button1 = (Button)findViewById(R.id.button1); // button1を取得. button1.setOnClickListener(new OnClickListener() { // リスナーをセット. @Override public void onClick(View v) { // TODO Auto-generated method stub // Fragment1を表示し, Fragment2を非表示にする. FragmentManager fragmentManager = getFragmentManager(); // fragmentManagerの取得. Fragment f2 = fragmentManager.findFragmentById(R.id.framelayout2); // f2を取得. FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); // fragmentTransactionの取得. fragmentTransaction.hide(f2); // f2を非表示. fragmentTransaction.commit(); // 確定. } }); // フラグメントの追加. FragmentManager fragmentManager = getFragmentManager(); // fragmentManagerの取得. FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); // fragmentTransactionの取得. Fragment1 fragment1 = new Fragment1(); // fragment1の生成. fragmentTransaction.add(R.id.framelayout1, fragment1); // fragment1を追加. Fragment2 fragment2 = new Fragment2(); // fragment2の生成. fragmentTransaction.add(R.id.framelayout2, fragment2); // fragment2を追加. fragmentTransaction.commit(); // 確定. } }
framelayout1にfragment1、framelayout2にfragment2をadd。
button1を押したら、framelayout2に紐づけられたFragmentを探して、それを非表示。
起動時。
Button1を押したら、
Fragment2が非表示になり、Fragment1だけ残る。
今度は、framelayout1に紐づけられたFragmentを探して、それを非表示。
起動時はこうだが、
Button1を押したら、今度はFragment1が消えた。