Viewpager2 和片段

M A*_*A F 8 java android android-fragments android-viewpager2

ViewPager2 does not support direct child views
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下代码在片段之间进行转换,但在使用 viewpager2 时出现上述错误。

调用片段 1 转换到片段 2:

getFragmentManager().beginTransaction().replace(R.id.viewPager2, new q2_fragment()).addToBackStack(null).commit();
Run Code Online (Sandbox Code Playgroud)

主布局中的 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" />
Run Code Online (Sandbox Code Playgroud)

Main 中的实例化:

final ViewPager2 viewPager2 = findViewById(R.id.viewPager2);
        viewPager2.setAdapter(new QuestionsActivity.ScreenSlidePagerAdapter(this));
        viewPager2.setUserInputEnabled(false);
Run Code Online (Sandbox Code Playgroud)

如何使用 viewpager2 避免此错误?

小智 5

TabLayout当我放置beforeViewPager的结束标签时,我遇到了同样的错误

那是:

<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>
Run Code Online (Sandbox Code Playgroud)

这是不允许的!

只需删除结束标签并分隔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" />

Run Code Online (Sandbox Code Playgroud)


rah*_*hat 1

很乐意为您提供帮助,请详细说明您的要求。你到底想做什么。

如果您想在特定点转到fragment 2from ,那么您应该在片段和活动之间使用,告诉活动将 移动到具有 的项目。fragment 1interfaceviewpagerfragment 2

Fragment 到 Activity 的接口模式

界面

public interface FragmentCallback{
    public void goTo(int pos);
}
Run Code Online (Sandbox Code Playgroud)

活动

public class MyActivity extends AppCompatActivity implements MyStringListener{

  @Override
  public void goTo(int pos){
        yourviewpagerAdapter.setCurrentItem(pos);
  }

}

public class Fragment1 {

        private FragmentCallback callBack;

        @Override
        public void onAttach(Context context) {
            super.onAttach(context);
            try {
                callBack = (FragmentCallback) context;
            } catch (ClassCastException castException) {
                /** The activity does not implement the listener. */
            }
        }

       

        public void someEvent() {
            if(callBack!=null) {
                callBack.goTo(1);
            } 
        }           

    }
Run Code Online (Sandbox Code Playgroud)