我是应用开发的新手,我想在我的应用页面之间创建流畅的选项卡式过渡。问题是,这需要我不熟悉的片段和viewpager2(在过去的几个月中我一直在从事活动)。为了学习如何做到这一点,我试图创建一个非常简单的viewPager2用例(只有两个简单的带有textViews的片段),并遇到了我的第一个问题:在下面的代码中,“ getSupportFragmentManager带红色下划线。给我建议将适配器构造函数中的参数从FragmentActivity更改为FragmentManager。但是,当我这样做时,“ super(fa)”中的“ fa”用红色下划线标记,我不知道如何解决此问题在线上的大多数教程都是针对ViewPager的先前版本,而不是针对ViewPager2的。与viewPager2有关的大部分教程都是用Kotlin编写的,我不在乎学习,部分原因是名称,部分是因为我计划接下来学习Dart,因为它允许将相同的代码同时应用于android和Apple设备。是否有人知道如何解决该错误,或者可以将我指向可以用作模板的viewPager2的非常简单的Java实现?我敢肯定,甚至可以写下她!!非常感谢!
MainActivity包括适配器:
public class MainActivity extends AppCompatActivity {
FragmentStateAdapter fragmentStateAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ViewPager2 vp2 = findViewById(R.id.viewPager);
fragmentStateAdapter = new ScreenSlidePagerAdapter(this);
}
private class ScreenSlidePagerAdapter extends FragmentStateAdapter {
private static final int NUM_PAGES = 2;
public ScreenSlidePagerAdapter(FragmentActivity fa) {
super(fa);
}
@Override
public Fragment createFragment(int position) {
switch (position) {
case 0:
return FragmentOne.newInstance(0,"I'm Fragment 1");
case 1 :
return FragmentTwo.newInstance(1, "I'm fragment 2");
default: return null;
}
}
@Override
public int getItemCount() {
return NUM_PAGES;
}
}
}
片段示例:
public class FragmentOne extends Fragment {
private String mParam1;
private int page;
public FragmentOne() {
}
public static FragmentOne newInstance(int page, String param1) {
FragmentOne fragment = new FragmentOne();
Bundle args = new Bundle();
args.putInt("someInt", page);
args.putString("someTitle", param1);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(mParam1);
page = getArguments().getInt(mParam1, 0);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_one, container, false);
TextView textView = view.findViewById(R.id.fragmentOne);
textView.setText(mParam1);
return view;
}
}
片段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=".FragmentOne">
<TextView
android:id="@+id/fragmentOne"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="fragmentOne"
android:textColor="@android:color/black"/>
</FrameLayout>
将代码更改为此,您的适配器将FragmentActivity
作为参数
fragmentStateAdapter = new ScreenSlidePagerAdapter(this);
mParam1 = getArguments().getString("someTitle");
page = getArguments().getInt("someInt", 0);