我有主要 Activity ,上面只有 ViewPager。第一个标签页 fragment 包含:
<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>
我想在用户点击 ListView 中的项目时显示详细信息 fragment :
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();
}
}
);
代码 'fragmentTransaction.commit();'被调用时,会调用 EventFragment 的 onCreateView,但是在“fragmentTransaction.commit();”之后什么都没发生。没有错误,没有结果。只有 ListView 仍在显示和工作。
我做错了什么?我找到了一些示例,我的代码看起来一样,但无法正常工作,我对此无能为力。
谢谢!
最佳答案
当您执行replace
或add
时,它要做的就是将Fragment
的View 添加到您指定的容器中.唯一的区别是:
replace
将移除容器内第一个现有的 fragment ,该 fragment 先前由指定的 FragmentManager 处理
。
add
只会将 Fragment 添加到容器中。
在您的例子中,您有一个 LinearLayout 容器,其中包含一个大小为 match_parent
的 ListView。这意味着,当 ChildFragmentManager 将您的 Fragment 添加到容器时,它会将其添加到 LinearLayout。该 fragment 实际上位于 View 范围之外的 ListView 下方。
将 LinearLayout 更改为 FrameLayout,您的 Fragment 将显示在 ListView 上。
关于android - getChildFragmentManager > beginTransaction > 替换 > 提交 : no result,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20414017/