4

プログラムで作成して、1つの画面に複数のフラグメントを表示しようとしています。各フラグメントをアクティビティレイアウトファイルに含めることで、これを問題なく行うことができます。しかし、私がプログラムでそれをやろうとすると、私は混乱します。これは、画面上の2つのフラグメントについてこれまでに持っているものです。

メインクラス:

public class MainActivity extends FragmentActivity {

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

        FragmentOne one = new FragmentOne();
        FragmentTwo two = new FragmentTwo();
        FragmentThree three = new FragmentThree();

        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.add(R.id.imOne, one, "fragmentone");
        ft.add(R.id.imTwo, two, "fragmenttwo");
        ft.add(R.id.imThree, three, "fragmenthree");
        ft.commit();

    }
}

フラグメント1:

public class FragmentOne extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        View view = inflater.inflate(R.layout.frag_one, container, false);
        return view;
    }

}

フラグメント2:

public class FragmentTwo extends Fragment{

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        View view = inflater.inflate(R.layout.frag_two, container, false);
        return view;
    }

}

私の2つのフラグメントクラスのレイアウトファイルには、単純なTextViewが含まれています。そして、私のメインクラスのactivity_main.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="horizontal" >

    <FrameLayout
        android:id="@+id/imOne"
        android:name="com.david.twofragexample.FragmentOne"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="2" />

    <FrameLayout
        android:id="@+id/imTwo"
        android:name="com.david.twofragexample.FragmentTwo"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="2" />

    <FrameLayout
        android:id="@+id/imThree"
        android:name="com.david.twofragexample.FragmentThree"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="2" />

</LinearLayout>

プログラムで実行しようとすると、activity_main.xmlファイルに何を含めるべきか混乱します。したがって、Android開発者ガイド(http://developer.android.com/guide/components/fragments.html)から、

FragmentManager fragmentManager = getFragmentManager()
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
FragmentOne fragment = new FragmentOne();
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.commit();

したがって、このコードをonCreateメソッドに追加すると、プログラムでこれを行うために、activity_main.xmlファイルにどのような変更を加える必要がありますか?R.id.fragment_containerがどこから来ているのかわかりません。画面のどこに新しいフラグメントが表示されるかをどのように判断できますか?ありがとうございます

編集:私はこれを電話ではなくタブレットで開発しています。これは解決され、上記のコードはプログラムで3つのフラグメントを追加します。

4

3 に答える 3

3
<?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="horizontal" >

    <FrameLayout
        android:id="@+id/list"
        android:name="com.david.twofragexample.FragmentOne"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="2" />

    <FrameLayout
        android:id="@+id/viewer"
        android:name="com.david.twofragexample.FragmentTwo"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="2" />

</LinearLayout>

あなたの活動で:

FragmentOne one = new FragmentOne();
FragmentTwo two = new FragmentTwo();

fm = getSupportFragmentManager();
fm.beginTransaction().replace(R.id.list, one, "fragmentone").commit();
fm.beginTransaction().replace(R.id.viewer, two, "fragmenttwo").commit();

私はあなたがこれを研究することを提案します:

http://developer.android.com/reference/android/app/Fragment.html

フラグメントのライフサイクルなどを完全に理解します。私が示す方法は迅速で汚いですが、必ずしも最善ではありません。

于 2013-01-18T18:15:03.583 に答える
2

コメントするのに十分な担当者がまだいないので、ここに情報を残しておきます。最初は疑問もありましたが、RafaelTが提案した方法はうまく機能します。

1)次のようにxmlを定義します。

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

2)各フラグメントを同じスロットに追加します。

View box = v.findViewById(R.id.container);
FragmentTransaction ft = getFragmentManager().beginTransaction();
for (String catalog : mCatalogs) {
    Fragment fragment = HighlightedProductFragment.newInstance(catalog);
    ft.add(R.id.container, fragment, catalog);
}
ft.commit();

このトリッキーな要件の解決策をありがとう。

于 2019-06-04T16:01:25.877 に答える
0

このようにしてみてください:

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

あなたのactivity_main.xmlとして

あなたは自分自身に正しい質問をしました:idはfragment_containerどこにありますか、そして答えは:どこにもありませんでした。>また、レイアウトを水平に設定します。これにより、追加されたビューが「画面外」になる可能性が非常に高くなります。

于 2013-01-18T17:28:37.687 に答える