ViewPager2 does not support direct child views
我正在尝试使用以下代码在片段之间进行转换,但是在使用viewpager2时出现上述错误。
调用片段1过渡到片段2:
getFragmentManager().beginTransaction().replace(R.id.viewPager2, new q2_fragment()).addToBackStack(null).commit();
主布局中的Viewpager2 XML:
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewPager2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="10"
android:orientation="horizontal"
android:scaleType="fitXY" />
Main中的实例:
final ViewPager2 viewPager2 = findViewById(R.id.viewPager2);
viewPager2.setAdapter(new QuestionsActivity.ScreenSlidePagerAdapter(this));
viewPager2.setUserInputEnabled(false);
如何避免viewpager2出现此错误?
答案 0 :(得分:1)
很乐意为您提供帮助,请详细说明您的要求。你到底想做什么。
如果您想从 fragment 2
转到 fragment 1
,在特定点,那么您应该在片段和活动之间使用 interface
,告诉活动移动 {{1} } 到具有 viewpager
的项目。
Interface Pattern for Fragment to Activity
界面
fragment 2
活动
public interface FragmentCallback{
public void goTo(int pos);
}
答案 1 :(得分:1)
当我将 TabLayout
放在 ViewPager
的结束标记之前时,我遇到了同样的错误
即:
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.tabs.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</androidx.viewpager2.widget.ViewPager2>
这是不允许的!
只需删除结束标记并分隔 TabLayout
即可
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<com.google.android.material.tabs.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
答案 2 :(得分:0)
正如声明所说
ViewPager2 does not support direct child views
所以永远不要尝试将片段直接添加到 viewPager2
即以下代码行不适用于 viewPager2。
getFragmentManager().beginTransaction().replace(R.id.viewPager2, new q2_fragment()).addToBackStack(null).commit();
如果您尝试在 fragmentManager
的帮助下将片段直接添加到 viewPager2,则会产生异常。
所以只需删除上面的代码行即可摆脱此异常。
答案 3 :(得分:-1)
使用 mPager.setNestedScrollingEnabled(true);