gpt4 book ai didi

android - 从子 fragment 本身动态替换子 fragment

转载 作者:搜寻专家 更新时间:2023-11-01 08:26:35 25 4
gpt4 key购买 nike

我正在使用自然包含 fragment 的 Viewpager。在其中一个 fragment 中我有一个子 fragment (子 fragment )每个子 fragment 都包含一个按钮,该按钮调用以下内容来替换子 fragment 本身

FragmentManager manager = getChildFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.containerProfileDetails, new ProfileDetailsAddressFragment());
transaction.commit();

只是为了让它更直观:

1) 是父 fragment

2) 是子 fragment 。我需要通过按下子 fragment 本身内的按钮来替换子 fragment

┌--------┐
| 1 |
| ┌-----┐|
| | 2 ||
| | ||
| └-----┘|
└--------┘

注意:我知道可以使用这种方法替换 fragment ,但是,似乎无法对子 fragment 执行此操作,因为它会抛出以下错误。

java.lang.IllegalArgumentException:未找到 fragment ProfileDetailsAddressFragment 的 id 0x7f0f0104 (com.example.app:id/containerProfileDetails) 的 View

更新

父 fragment 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:gravity="center"
tools:context="com.example.app.fragments.ProfileDetailsFragment">

<TextView
android:id="@+id/lbl_page"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="42sp"
tools:text="2"
android:visibility="gone"/>

<FrameLayout
android:id="@+id/containerProfileDetails"
android:layout_width="match_parent"
android:layout_height="match_parent"
></FrameLayout>
</LinearLayout>

子 fragment XML:

<FrameLayout 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"
tools:context="com.example.app.fragments.ProfileDetailsUserFragment">

<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="Fragment Profile User Details" />

<Button
android:id="@+id/btnProfileDetailsUserNext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center"/>

</FrameLayout>

Java 父 fragment :

 public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_profile_details, container, false);
lblPage = (TextView) view.findViewById(R.id.lbl_page);

FragmentManager manager = getChildFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.containerProfileDetails, new ProfileDetailsUserFragment());
transaction.commit();
return view;
}

Java 子 fragment :

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_profile_details_user, container, false);

Button _btnProfileDetailsUserNext = (Button) v.findViewById(R.id.btnProfileDetailsUserNext);
_btnProfileDetailsUserNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager manager = getChildFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.containerProfileDetails, new ProfileDetailsAddressFragment());
transaction.commit();
}
});
return v;
}

最佳答案

Replace your Parent Fragment and Child Fragment Code with below

Parent_Fragment.Java

 public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_profile_details, container, false);
lblPage = (TextView) view.findViewById(R.id.lbl_page);

FragmentManager manager = getChildFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.containerProfileDetails, new ProfileDetailsUserFragment());
transaction.commit();
return view;
}

Child_Fragment.Java

 public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_profile_details_user, container, false);

Button _btnProfileDetailsUserNext = (Button) v.findViewById(R.id.btnProfileDetailsUserNext);
_btnProfileDetailsUserNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.containerProfileDetails, new ProfileDetailsAddressFragment());
transaction.commit();
}
});
return v;
}

我没有测试代码,它可能会产生一些编译错误,但实现方式是正确的。

关于android - 从子 fragment 本身动态替换子 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44414483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com