8

Fragment トランザクションを使用して、アクティビティに 2 つのフラグメントを追加しています。ただし、アプリの起動時に最初の Fragment のみが表示されることがあります。コードは次のとおりです。

主な活動

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    FragOne firstButton = new FragOne();
    FragmentTwo secButton = new FragmentTwo();

    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

    transaction.add(R.id.frag_container, firstButton);
    transaction.add(R.id.frag_container, secButton);

    transaction.commit();
}

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:id="@+id/frag_container"
    android:layout_height="fill_parent" 
    android:orientation="horizontal">

</LinearLayout>

frag_one.xml と frag_two.xml は似ています

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
   <Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Button One" />
</LinearLayout>

何が問題なのかわかりません...1つのフラグメントを追加する例をたくさん見ました。

4

5 に答える 5

4

答えるには遅すぎることはわかっていますが、問題を理解しました。frag_one.xml と frag_two.xml は次のようになります。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
   <Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Button One" />
</LinearLayout>

LinearLayoutlayout_height が に設定されていることを確認しmatch_parentます。画面全体を占めませんか?

作るだけでwrap_contentうまくいきます。あなたと同じ私のケースを解決しました。

于 2016-10-21T01:30:10.790 に答える
3

よくわかりませんが、両方のフラグメントが実際に追加されている可能性がありますが、それらはまったく同じであり、LinearLayout に配置されているため、一方が他方を隠しているためです。

私があなただったら、メイン アクティビティのレイアウトを相対レイアウトに変更し、フラグメントを2 つの異なるプレース ホルダーに追加して、これが問題かどうかを確認します。

私は実際にプログラムを実行していないので、まったく別のものかもしれません...頑張ってください!

于 2013-01-27T16:48:47.450 に答える
3

両方のフラグメント xml ファイルの高さパラメーターが「match_parent」であるため

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    *android:layout_height="match_parent"  WRONG!!! need to be "wrap_content"*
    android:orientation="vertical" >
   <Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Button One" />
</LinearLayout>

したがって、最初のフラグメントは親の高さ全体で膨らみ、他のフラグメントが追加されると、その場所がなくなります。

したがって、 onCreateView メソッドのコンテナ パラメータに null を設定することは、問題を解決する正しい方法ではありません。

android:layout_height="wrap_content" を設定するだけです

于 2014-06-18T20:45:14.773 に答える
0

はい、そうです、フラグメントは両方とも追加されますが、問題はフラグメントレイアウトが追加されることです...問題はフラグメントコードにありました

View view = inflater.inflate(R.layout.frag_one, container, false);

に変更

View view = inflater.inflate(R.layout.frag_one, null);
于 2013-01-29T09:59:19.827 に答える