Fragmentの差し替えがめんどくさい
はじめに
Fragmentを差し替える時に
FragmentManager manager = getFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); Fragment fragment = new HogeFragment(); transaction.replace(R.id.container, fragment); transaction.addToBackStack(null); transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); transaction.commit();
とかやるけど正直だるい。毎回こんなに書くのはなんかアレ。
変わりに
ActivityとFragmentでオーバーライドクラス作ってなんとか出来ないかと思ってやってみた。
/** * Activityをオーバーライドしたクラス * このクラスをActivityの派生クラスで継承する */ public class OverrideActivity extends Activity { public void replaceFragment (AbstractFragment fragment) { FragmentManager manager = getFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); transaction.replace(fragment.getContainerId(), fragment); transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); transaction.addToBackStack(null); transaction.commit(); } } /** * Fragmentを継承したAbstractクラス * Fragmentを差し替えるViewのidを返すメソッドを定義する */ public abstract class AbstractFragment extends Fragment { public int container_id; abstract public int getContainerId(); } /** * AbstractFragmentを継承した派生クラス */ public class HogeFragment extends AbstractFragment { public int container_id = R.id.container; public int getContainerId () { return container_id; } @Override public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.hoge_fragment, container, false); } } /** * OverrideActivityを継承した派生クラス */ public class HogeActivity extends OverrideActivity { @Override public void onCreate (Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.hoge_activity); // HogeFragmentに差し替える super.replaceFragment(new HogeFragment()); } }
FragmentManagerを作ってーなんやかんやっていう処理をオーバーライドしたActivityに全部任せてしまう。
これで差し替えはsuper.replaceFragmentメソッド呼ぶだけでよくなる。
けど、痒いところには手が届いてない感じでもうちょっと改善の余地がありそう。
ListFragmentとかDialogFragmentはどないやねんとか使ったFragmentManagerが欲しいときはどうすんだとか。
なんかいい書き方はないものか。