我在一个活动( MyActivity )中有两个片段( MyListFragment , MyDetailFragment )。第一个片段是项目列表,第二个片段是项目的详细信息(这是另一个列表,但我认为无关紧要)。 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 上有一个点击处理程序,它调用 MyActivity 中的方法,打开 MyDetailFragment 。
@Override
public void onActionSelected(MAction action, Integer position){
/**some code...*/
getFragmentManager().beginTransaction()
.replace(R.id.fragment_container,
new MyDetailFragment(mAction,position)).commit();
}
当我点击 MyListFragment 中的任何项目时, MyDetailFragment 将不会显示(虽然我知道它的生命周期方法被正确调用)。
我发现当我将 android:layout_weight =“1”放入 MyListFragment 中的片段定义时,它可以正常工作。 有人知道为什么吗?
据我了解android:layout_weight属性,只有在LinearLaoyout中有更多视图时它才会起作用,但我只有一个。
这是工作布局:
<?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>
由于
答案 0 :(得分:0)
getFragmentManager().beginTransaction()
.replace(R.id.fragment_container,
new MyDetailFragment(mAction,position)).commit();
您正在完全替换片段,因此一次fragment_container
中只有一个片段的视图。最好将fragment_container
设为FrameLayout
,并将片段布局根的高度和宽度设置为match_parent
。
答案 1 :(得分:0)
你使用layout_weight是错误的,我不认为你理解它的功能。要在LinearLayout parrent中运行,您必须具有weightSum,它将是布局的总重量。第二件事是根据LinearLayout方向设置childs weight或height 0dp。布局的每个子项必须具有layout_weight,并且权重的总和等于weightSum。这样布局将根据您的体重自动分割。
答案 2 :(得分:0)
好吧,我做错了一件事。
只能以编程方式加载的片段。不是xml中定义的片段。
但我不知道。因为MyListFragmentView在xml定义中包含片段,所以虽然我调用了replace,但是该方法并没有将actions_list_fragment替换为新的,而是在actions_list_fragment之后添加了新的。这就是layout_weights使它工作的原因 - 根LinearLayout中有两个孩子,但我只有一个。