使用Viewpager2和Kotlin在片段之间滑动

时间:2020-10-12 14:50:45

标签: android kotlin android-fragments android-viewpager2

我有一个用Java编写的旧项目,可以在三个不同的片段之间水平滑动,并在主要活动中进行了说明。效果很好。

public class MainActivity extends AppCompatActivity {
ViewPager pager;

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

    pager = findViewById(R.id.theViewPagerInTheMainActivity);
    pager.setOffscreenPageLimit(3);
    PagerAdapter adapter = new PagerAdapter(getSupportFragmentManager());

    Frag_A aFrag = new Frag_A();
    adapter.addItem(aFrag);
    Frag_B bFrag = new Frag_B();
    adapter.addItem(bFrag);
    Frag_C cFrag = new Frag_C();
    adapter.addItem(cFrag);

    pager.setAdapter(adapter);
    pager.setCurrentItem(1);
  }

  class PagerAdapter extends FragmentStatePagerAdapter {
    ArrayList<Fragment> items = new ArrayList<Fragment>();
    public PagerAdapter(FragmentManager fragManager) {
        super(fragManager);
    }
    public void addItem(Fragment item) {
        items.add(item);
    }
    @Override
    public Fragment getItem(int position) {
        return items.get(position);
    }
    @Override
    public int getCount() {
        return items.size();
        }
    }
}

每个三个不同的片段,然后是可以正常工作的不同代码,其开头为:

public class Frag_A extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.frag_a, container, false);
    }
}

与Frag_B和frag_b布局,Frag_C和frag_c布局相同。

我现在又重新做一次,但是在Kotlin中并使用ViewPager2。我没有以编程方式制作任何片段,我希望将其所有三个ID都写在主要活动上。当然,直接在Android Studio中转换代码无效,而且搜索时间无法满足我的需求。从我的拙劣理解出发,从一个预制片段中创建不同颜色的片段似乎并不适合我的项目,并且全部以红色下划线表示。是否可以在不导入.v4支持库的情况下进行制作?

1 个答案:

答案 0 :(得分:0)

自己解决!

class MainActivity : FragmentActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val adapter = DatPagerAdapter(this)
    val fragsList = listOf(Frag_A(), Frag_B(), Frag_C())
    adapter.fragsListHere.addAll(fragsList)
    theVP2InTheMainActivity.adapter = adapter
    theVP2InTheMainActivity.setCurrentItem(1)
  }
  class DatPagerAdapter(fragactivity: FragmentActivity) : FragmentStateAdapter(fragactivity) {
    val fragsListHere = mutableListOf<Fragment>()
    override fun getItemCount():Int = fragListHere.size
    override fun createFragment(position: Int): Fragment = fragListHere[position]
  }
}