【发布时间】:2017-06-07 13:46:18
【问题描述】:
我正在使用一个自然包含片段的 Viewpager。 在其中一个片段中我有一个子片段(子片段) 每个子片段都包含一个按钮,该按钮调用以下内容来替换子片段本身
FragmentManager manager = getChildFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.containerProfileDetails, new ProfileDetailsAddressFragment());
transaction.commit();
只是为了让它更直观:
1) 是父片段
2) 是子片段。 我需要通过按下子片段本身内的按钮来替换子片段
┌--------┐
| 1 |
| ┌-----┐|
| | 2 ||
| | ||
| └-----┘|
└--------┘
注意:我知道可以使用这种方法替换片段,但是,似乎无法对子片段执行此操作,因为它会引发以下错误。
java.lang.IllegalArgumentException: No view found for id 0x7f0f0104 (com.example.app:id/containerProfileDetails) for fragment ProfileDetailsAddressFragment
更新
父片段 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>
子片段 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:
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:
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;
}
【问题讨论】:
-
通常查看寻呼机没有容器,您将哪个 id 作为 R.id.containerProfileDetails 传递?
-
@AniruddhParihar 我使用
transaction.add(R.id.containerProfileDetails, new firstchildfragment());在父片段中添加第一个子片段 -
可以分享一下你的xml布局代码吗?
-
@AniruddhParihar 我假设发生了一些事情并且 R.id,containerProfileDetails 没有返回相同的 ID。
-
是的,我也一样,但我必须先了解你的设计结构。