fragment勉強記録1

##　静的にFragmentを呼び出す
fragmentがまじでわけわからんのでmainActivity（緑）の中にfragment（青）を呼び出して表示させることから試してみた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1139020/4ed0c7cb-44c5-0340-20cf-d9b8c48a64aa.png)

### mainActivity.java

mainActivity.java でやることは activity_main.xmlを表示するだけ

```java: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属性では、レイアウトプレビューでフラグメント内に描画されるレイアウトを宣言できる。これが無くてもコードは実行されてアプリ内でフラグメントは表示されるが、あるとプレビューの中で描画されるのでレイアウトの設定がやりやすい。

```xml: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>

```
#### 参考
↓tools:layout属性ありの時
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1139020/f137b8f6-6060-67ac-14a8-7fa8bf719883.png)

↓tools:layout属性なしの時
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1139020/b44c17af-58a6-6479-89c9-177999551089.png)


###SampleFragment.java
OnCreateView()で渡されたlayout inflaterにfragment_sample.xmlのレイアウトを挿入して返す。

```java: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を配置。

```xml: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>

```

↓fragment
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1139020/2a085a72-3e28-531a-c5da-bee1f69b31fb.png)