[英]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.