非常简单的viewPager2

问题描述 投票:0回答:1

我是应用开发的新手,我想在我的应用页面之间创建流畅的选项卡式过渡。问题是,这需要我不熟悉的片段和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>
java android android-studio android-viewpager
1个回答
0
投票

将代码更改为此,您的适配器将FragmentActivity作为参数

fragmentStateAdapter = new ScreenSlidePagerAdapter(this);
mParam1 = getArguments().getString("someTitle");
page = getArguments().getInt("someInt", 0);
© www.soinside.com 2019 - 2024. All rights reserved.