fkm blog

software開発に関することを書いていきます

ゼロからFragment(2)

ここまでのソースはこちら

最低限のFragmentを貼付けてみる. 本家のドキュメントにはレイアウトXMLに貼付ける方法があるけど, これにはどうも罠があるっぽい.

その罠とは, 後からReplaceできないというもの.

Activityの代わりとして使う場合は, MainActivityでこんな風に遷移を書く.

public class MainActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        if (savedInstanceState == null) {
            FragmentManager manager = getSupportFragmentManager();
            FragmentTransaction transaction = manager.beginTransaction();
            
            transaction.replace(R.id.main, LoginFragment.newInstance());
            
            transaction.commit();
        }
    }
}

R.layout.activity_mainは, こんな感じでRelativeLayoutを設置しているだけ. ホントはFrameLayoutのほうがいい?

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/main"
    >
</RelativeLayout>

ここでのお作法.

  • if (savedInstanceState == null) のチェックは地味に重要
  • R.id.mainなViewはViewGroupである必要あり

後者ははまる人は少ないと思うけど, 前者は上記のように書かないと後々困ったことに.