我正在尝试创建一个包含两个 fragment 的嵌套 fragment View ,其中 fragment 将包含 ListView/RecyclerView,第二个 ListView 数据将依赖于第一个 ListView 项目。
它将类似于任何电子商务应用程序的产品过滤屏幕。
请看下面的代码:
TestActivity.java 包含父 fragment :
public class TestActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
FilterFragment filterFragment = new FilterFragment();
ft.replace(R.id.filter_fragment_container, filterFragment);
ft.commit();
}
}
Activity activity_test.xml的布局文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_test"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.splice.TestActivity">
<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
父 fragment 类FilterFragment.java
public class FilterFragment extends Fragment{
public FilterFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_filter, container, false);
return v;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
insertNestedFragment();
}
// Embeds the child fragment dynamically
private void insertNestedFragment() {
Fragment childFragment = new TestFragment1();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.replace(R.id.fragment1_container, childFragment).commit();
}
}
父 fragment 布局文件fragment_filter.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_margin="@dimen/activity_horizontal_margin"
tools:context="com.splice.views.FilterFragment">
<!-- TODO: Update blank fragment layout -->
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:text="@string/filter_purchase_title" />
<FrameLayout
android:layout_width="match_parent"
android:id="@+id/fragment1_container"
android:layout_height="wrap_content">
</FrameLayout>
子 fragment 类TestFragment1.java
public class TestFragment1 extends Fragment {
public TestFragment1() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_test_fragment1, container, false);
}
}
结果仅显示父 fragment 的内容,而不显示子 fragment 的内容。
如果我采用了错误的方法来实现这一点,请纠正我。
谢谢。
最佳答案
我发现您提供的代码存在一些问题:
- ft.replace(R.id.filter_fragment_container, filterFragment);在 Activity_test布局称为fragment_container。我不知道 如果这是一个错字,但只是为了确定
- 在fragment_filter.xml中,LinearLayout具有垂直方向,TextView具有android:layout_height="match_parent"推送 屏幕外的下一个元素, fragment 。这就是为什么,可能, 您看不到该 fragment 。
为了左右分割布局,您可以将其设置为:
<LinearLayout ...
android:orientation="horizontal"
android:weightSum="2">
<View1
...
android:layout_width="0dp"
android:layout_weight="1"
/>
<View2
...
android:layout_width="0dp"
android:layout_weight="1"
/>
</LinearLayout>
关于java - 如何在android中创建嵌套的 fragment View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41286178/