Dmi*_*sky 1 android android-fragments android-viewpager
我主要活动只有ViewPager.第一个标签页片段包含:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/llEventsTabPage"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/lvEvents"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
我想在用户点击ListView中的项目时显示详细信息片段:
lvEvents.setAdapter(adapter);
lvEvents.setOnItemClickListener(
new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View view, int position, long id) {
Fragment eventFragment = new EventFragment();
FragmentTransaction fragmentTransaction = getChildFragmentManager().beginTransaction();
fragmentTransaction.addToBackStack(null);
fragmentTransaction.replace(R.id.llEventsTabPage, eventFragment);
fragmentTransaction.commit();
}
}
);
Run Code Online (Sandbox Code Playgroud)
代码'fragmentTransaction.commit();' 被调用,调用EventFragment的onCreateView,但在'fragmentTransaction.commit();'之后 什么都没发生.没有错误,没有结果.只是列表视图仍然显示和工作.
我究竟做错了什么?我找到了一些例子,我的代码看起来一样,但没有用,我对此无能为力.
谢谢!
当你做一个replace或者add,它所要做的就是将Fragment视图添加到你指定的容器中.唯一的区别是:
replace将删除先前容器内的第一个现有Fragment that is handled by the FragmentManager specified.
add 只需将Fragment添加到容器中即可.
在您的情况下,您有一个LinearLayout容器,其中包含一个大小的ListView match_parent.这意味着,当ChildFragmentManager将Fragment添加到容器时,它会将它添加到LinearLayout.该片段实际上位于View范围之外的ListView之下.
将LinearLayout更改为FrameLayout,您的Fragment将显示在ListView上.