【问题标题】:How to add a viewPager for swiping between fragments without adding an activity如何在不添加活动的情况下添加用于在片段之间滑动的 viewPager
【发布时间】:2020-02-29 16:56:01
【问题描述】:

我正在开发一个 Kotlin 应用程序,并且在某些时候我想实现 viewPager 在片段之间滑动。我有一项活动可以通过导航图导航到应用程序的其余部分。我还没有真正理解这种滑动应该如何工作。

我的问题是,除了 pageAdapter 之外,我还需要实现一个新活动吗?这个活动将如何与主要活动合作?我的应用程序目前有一个启动画面,之后我想在片段之间使用滑动模式。

【问题讨论】:

    标签: android android-fragments kotlin android-viewpager viewpage


    【解决方案1】:

    我想实现 viewPager 在片段之间滑动。

    不错

    我有一个活动可以通过导航图导航到应用程序的其余部分。

    除了 pageAdapter 之外,我还需要实现一个新活动吗?

    没有

    这个活动将如何与主要活动合作?

    没有第二个activity,那就不需要“合作”

    我想要片段之间的滑动模式。

    https://gist.github.com/Zhuinden/c643f03a023a9cbe83fff6c75c948d3b

    class MyFragmentPagerAdapter(
        private val context: Context,
        fragmentManager: FragmentManager
    ) : FragmentPagerAdapter(fragmentManager) {
        override fun getCount() = 2
    
        override fun getItem(position: Int) = when(position) {
            0 -> FirstFragment()
            1 -> SecondFragment()
            else -> throw IllegalStateException("Unexpected position $position")
        }
    
        override fun getPageTitle(position: Int): CharSequence = when(position) {
            0 -> context.getString(R.string.first)
            1 -> context.getString(R.string.second)
            else -> throw IllegalStateException("Unexpected position $position")
        }
    }
    
    class ParentFragment: Fragment() {
        override fun onCreateView(...) = ...
    
        override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            super.onViewCreated(view, savedInstanceState)
            val viewPager = view.findViewById(R.id.view_pager)
            viewPager.adapter = MyFragmentPagerAdapter(requireContext(), childFragmentManager)
            tabLayout.setupWithViewPager(viewPager)
        }
    }
    

    【讨论】:

    • 感谢您的回复,但我还是不明白。我已经按照您的建议创建了 pageAdapter。 parentFragment 中的代码应该在哪里实现?我是新手,如果这听起来像一个愚蠢的问题,我很抱歉。
    • 另外,我应该将 viewPager 和 tabLayout 应用到我想刷的所有片段吗?
    • 你需要 ViewPager,你可能不需要 TabLayout。
    【解决方案2】:

    试试这个

    在你的 viewPager 中

     class pageradapter (fm: FragmentManager) : FragmentStatePagerAdapter(fm){
    override fun getItem(position: Int): Fragment {
        when(position){
            0-> return fragment1()
            1-> return fragment2() // you can add more if you have more fragments
            else-> return fragment3()
    
        }
    }
    override fun getCount(): Int {
        return 3   
     number of fragments that you have so the swiping could work
    }
    

    在您的片段 1 或 2 或 3 ...等中'

     class fragment1 : Fragment() {
    
    
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                              savedInstanceState: Bundle?): View? {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment1, container, false)
    // write your codes 
    }
    

    在初始屏幕后的 Activity 中

    class MainActivity : AppCompatActivity(){
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main4)
    
        val adapter = pageradapter(supportFragmentManager)
        val pager = findViewById<View>(R.id.pager) as ViewPager
        pager.adapter = adapter
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-11
      • 1970-01-01
      • 2015-11-11
      相关资源
      最近更新 更多