6903
現在`Fragment`を使ってアプリを作っているのですが、`Fragment`の使い方がイマイチ分かっていません。最初は`layout.xml`で指定した`Fragment`に`add`や`replace`をしていたのですが、それではうまく機能しないということが分かったので、以下のコードのようにしてみたのですが、ボタンを押したときに`FragmentA`のレイアウトと`FragmentB`のレイアウトが重なってしまいます。色々調べてみても`Fragment`の使い方がイマイチ分からず困っています。どうすれば`Fragment`を使ってレイアウトを切り替えることができるでしょうか？すみませんが、よろしくお願いします。

layout

```

    <RelativeLayout 
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <Button
            android:id="@+id/btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"/>
    
    </RelativeLayout>
    
```

activity

```

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            FragmentManager manager = getFragmentManager();
            FragmentTransaction transaction = manager.beginTransaction();
            transaction.replace(R.id.container, new FragmentA());
            transaction.addToBackStack(null);
            transaction.commit();
    
            Button button = (Button)findViewById(R.id.btn); {
                button.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        FragmentManager manager = getFragmentManager();
                        FragmentTransaction transaction = manager.beginTransaction();
                        transaction.add(R.id.container, new FragmentB());
                        transaction.addToBackStack(null);
                        transaction.commit();
                    }
                });
            }
        }
    
```
CC BY-SA 3.0
2015-02-22T02:12:23.310
6900
2015-02-22T02:43:57.130
5210
question
android fragment
Fragmentでreplaceしてもレイアウトが重なる
ボタンクリック時、`add`を呼んでいるので重なるのは当然のように思えます。`replace`が正しいです。

```

    Button button = (Button)findViewById(R.id.btn); {
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            FragmentManager manager = getFragmentManager();
            FragmentTransaction transaction = manager.beginTransaction();
            // addを呼んでいるので、重なる
            transaction.add(R.id.container, new FragmentB());
            transaction.addToBackStack(null);
            transaction.commit();
        }
    });
    
```
CC BY-SA 3.0
2015-02-22T02:43:57.130
6903
2015-02-22T02:43:57.130
845
6900
answer