java - 如何在android中创建嵌套的 fragment View ?

标签 java android android-layout listview android-fragments

我正在尝试创建一个包含两个 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 的内容。

我想实现类似的东西 enter image description here

如果我采用了错误的方法来实现这一点,请纠正我。

谢谢。

最佳答案

我发现您提供的代码存在一些问题:

  1. ft.replace(R.id.filter_fragment_container, filterFragment);在 Activity_test布局称为fragment_container。我不知道 如果这是一个错字,但只是为了确定
  2. 在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/

相关文章:

android - Android 上的 OutOfMemory 异常

android - 同一列上的两个按钮

java - 在Eclipse中构建Maven项目时出现错误,退出命令提示符后还检查maven版本

java - 当循环到另一个列表java时尝试将元素添加到列表中

java - 如何保证AtomicLong addAndGet结果的正确性

android - 从使用 Widget.EditText 样式的 TextView 中删除下划线

android - 如何在 Android View 之间添加 GLSurfaceView?

java - 虽然我已经为对象属性定义了值,但是它们都变成了 null?为什么?

android - 如何正确销毁 AsyncTasks?

java - FragmentTransaction Replace() 方法仅替换布局中的某些元素