簡體   English   中英

很簡單的viewPager2

[英]Very simple viewPager2

我是應用程序開發的新手,我想在我的應用程序的頁面之間創建流暢的選項卡式過渡。 問題是這需要我不熟悉的片段和viewpager2(過去幾個月我一直在從事活動)。 為了學習如何做到這一點,我正在嘗試創建一個非常簡單的 viewPager2 用例(只有兩個帶有 textViews 的簡單片段)並遇到了我的第一個問題:在下面的代碼中,“getSupportFragmentManager 帶有紅色下划線。它給了我將適配器構造函數中的參數從 FragmentActivity 更改為 FragmentManager 的建議。但是,當我這樣做時,“super(fa)”中的“fa”會被紅色下划線,我不知道如何解決這個問題網上大部分教程都是針對之前版本的viewPager,而不是針對ViewPager2,關於viewPager2的大部分都是用Kotlin寫的,我懶得學了,一部分是因為名字,一部分是因為我計划接下來學習 Dart,因為它允許將相同的代碼應用於 android 和蘋果設備。有誰知道如何修復該錯誤或可以指出一個非常簡單的 Z93F725A07423FE1C889F4 48B33D21F46Z viewPager2 的實現,我可以用作模板嗎? 我敢肯定,甚至可以寫在這里! 太感謝了!

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM