## 静的にFragmentを呼び出す
fragmentがまじでわけわからんのでmainActivity(緑)の中にfragment(青)を呼び出して表示させることから試してみた。
mainActivity.java
mainActivity.java でやることは activity_main.xmlを表示するだけ
mainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
activity_main.xml
- main activity からsetContentViewで呼び出すレイアウト
- ここではconstraint layout で作成(どのレイアウトを使っても大丈夫)
- fragmentタグを使って中央にfragmentを配置
- ポイントはandroid:name 属性とtools:layout属性
- android:name属性では書いてあるクラスをインスタンス化する。つまり、この場合ではsampleAppプロジェクトのsampleFragmentクラスをインスタンス化する。sampleFragmentクラスではフラグメントのレイアウトを生成するので、フラグメントが表示されるようになる。
- tools:layout属性では、レイアウトプレビューでフラグメント内に描画されるレイアウトを宣言できる。これが無くてもコードは実行されてアプリ内でフラグメントは表示されるが、あるとプレビューの中で描画されるのでレイアウトの設定がやりやすい。
activity_main.xml
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#8BC34A"
tools:context=".MainActivity">
<fragment
android:id="@+id/fragment"
android:name="com.example.sampleapp.SampleFragment"
tools:layout="@layout/fragment_sample"
android:layout_width="match_parent"
android:layout_height="300dp"
android:layout_marginStart="16dp"
android:layout_marginTop="100dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="100dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
参考
###SampleFragment.java
OnCreateView()で渡されたlayout inflaterにfragment_sample.xmlのレイアウトを挿入して返す。
SampleFragment.java
public class SampleFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
//引数で渡されるLayoutInflaterにFragmentのレイアウトをinflate(挿入)して返す
return inflater.inflate(R.layout.fragment_sample, container, false);
}
}
fragment_sample.xml
constraintLayout(青色)の中にtextViewを配置。
fragment_sample.xml
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00BCD4"
tools:context=".SampleFragment">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_fragment"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>