使用 VIewPager2 的简单滑动屏幕 (Java)

Simple swipe screen using VIewPager2 (Java)

我正在尝试创建将显示三个屏幕的布局,这些屏幕可以通过滑动或按钮进行更改。在这些按钮之间应该是所选页面的点指示器。

我花了很多时间搜索样本如何做,但通常我会卡在一些问题上。我不需要动态添加片段的选项。最好的可行解决方案是 thisone,但我无法创建三个不同的片段,而且它缺少点指示器。

有人可以帮我解决这个问题吗?非常感谢。

您可以通过从 RecyclerView.Adapter() 扩展并为每个页面使用简单的布局(而不是片段)来创建一个适配器,并将该适配器设置为 viewpager2.adapter = adapter

您可以只拥有一个扩展到 FragmentStateAdapter 的新 class,并将 class 设置为您的 viewpager 的适配器,如下所示:

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentTransaction;
import androidx.viewpager2.adapter.FragmentStateAdapter;
import androidx.viewpager2.widget.ViewPager2;

import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

ViewPager2 viewPager2;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    viewPager2 = findViewById(R.id.viewpager2);
    viewPager2.setAdapter(new ViewPagerFragmentAdapter(this));
}

static class ViewPagerFragmentAdapter extends FragmentStateAdapter {

    public ViewPagerFragmentAdapter(@NonNull FragmentActivity fragmentActivity) {
        super(fragmentActivity);
    }

    @NonNull
    @Override
    public Fragment createFragment(int position) {
        switch (position) {
            case 0:
                return new Vertical1();
            case 1:
                return new Vertical2();
            case 2:
                return new Vertical3();
        }
        return new Vertical2();
    }

    @Override
    public int getItemCount() {
        return 3;
    }
}

}