0

1つのアクティビティ ( MyActivity ) に2 つのフラグメント ( MyListFragmentMyDetailFragment ) があります。最初のフラグメントは項目のリストで、2 番目のフラグメントは項目の詳細です (これは別のリストですが、問題ではないと思います)。MyActivityが開始されると、最初のリスト フラグメントが表示されます。

MyListFragmentビュー:

<?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" >
    <fragment class="myapp.ActionsList"
              android:id="@+id/actions_list_fragment"
              android:layout_width="match_parent"
              android:layout_height="match_parent" />
</LinearLayout>

MyDetailFragmentビュー:

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

    <ListView
            android:id="@android:id/list"
            android:tag="@string/activities_list_tag"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"/>

</LinearLayout>

MyListFragment には、 MyDetailFragmentを開くMyActivityのメソッドを呼び出すクリック ハンドラがあります

@Override
public void onActionSelected(MAction action, Integer position){
/**some code...*/
    getFragmentManager().beginTransaction()
                    .replace(R.id.fragment_container, 
                     new MyDetailFragment(mAction,position)).commit();
}

問題は:

MyListFragmentの項目をクリックしても、MyDetailFragmentは表示されません (ただし、ライフサイクル メソッドが適切に呼び出されることはわかっています)。

MyListFragmentのフラグメント定義にandroid:layout_weight="1"を配置すると、機能することがわかりました。理由を知っている人はいますか?

私は android:layout_weight プロパティを理解しているので、LinearLaoyout にもっと多くのビューがある場合にのみ何らかの役割を果たすはずですが、私は 1 つしか持っていません。

これは作業レイアウトです:

<?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" >
    <fragment class="myapp.ActionsList"
              android:id="@+id/actions_list_fragment"
              **android:layout_weight="1"**
              android:layout_width="match_parent"
              android:layout_height="match_parent" />
</LinearLayout>

ありがとう

4

3 に答える 3

0
getFragmentManager().beginTransaction()
                .replace(R.id.fragment_container, 
                 new MyDetailFragment(mAction,position)).commit();

フラグメントを完全に置き換えているため、一度に表示されるフラグメントは 1 つだけfragment_containerです。を作成fragment_containerし、FrameLayoutフラグメント レイアウト ルートの高さと幅を に設定することをお勧めしmatch_parentます。

于 2013-11-05T14:37:51.753 に答える
0

わかりました、私は間違ったことをしていました。

プログラムによってロードされたフラグメントのみを置き換えることができます。xml で定義されたフラグメントではありません。

しかし、私はそれを知りませんでした。MyListFragmentView には xml 定義にフラグメントが含まれているため、replaced を呼び出しましたが、メソッドは actions_list_fragment を新しいものに置き換えず、actions_list_fragment の後に新しいものを配置しました。そのため、layout_weights が機能しました。ルート LinearLayout には 2 つの子がありましたが、1 つしかありませんでした。

于 2013-11-05T15:46:59.853 に答える