从PagerAdapter调用时片段消失

时间:2019-04-01 19:41:25

标签: android android-fragments kotlin

我有一个带有ViewPager的Activity,其中包含用自定义按钮召唤的片段。当前,我的自定义适配器的getItem方法正在被调用,但传呼机将变为空白,而不是进入新片段

这是我的适配器:

class ScreenSlidePagerAdapter(fragmentManager: FragmentManager) : FragmentStatePagerAdapter(fragmentManager) {


    private val NUM_FRAGMENTS = 2



    override fun getCount(): Int = NUM_FRAGMENTS

    override fun getItem(position: Int): Fragment {

        var fragment: Fragment = WelcomeFragment.newInstance()


        when (position) {
            0 -> fragment = WelcomeFragment.newInstance()
            1 -> fragment = LanguageSelectFragment.newInstance()


        }

        println(position)



        return fragment
    }
}

这是单击按钮时调用的方法。这些视图被赋予一个标签,这些标签对应于它们在适配器中的Fragment位置,单击可检索该标签以拉出正确的片段。

private fun switchScreens(view: View) {


        val fragment = mPagerAdapter.getItem(view.getTag().toString().toInt())
        val fragmentManager = supportFragmentManager
        val fragmentTransaction = fragmentManager.beginTransaction()
        fragmentTransaction.replace(R.id.main_view_pager, fragment)
        fragmentTransaction.commit()
    }

还有我的片段:

class LanguageSelectFragment : Fragment() {


    private var listener: OnFragmentInteractionListener? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        arguments?.let {

        }
    }

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


    fun onButtonPressed(uri: Uri) {
        listener?.onFragmentInteraction(uri)
    }

    override fun onAttach(context: Context) {
        super.onAttach(context)
        if (context is OnFragmentInteractionListener) {
            listener = context
        } else {

        }
    }

    override fun onDetach() {
        super.onDetach()
        listener = null
    }


    interface OnFragmentInteractionListener {

        fun onFragmentInteraction(uri: Uri)
    }

    companion object {
        @JvmStatic
        fun newInstance() =
            LanguageSelectFragment().apply {
                arguments = Bundle().apply {

                }
            }
    }
}

1 个答案:

答案 0 :(得分:1)

您是否有一个ViewPager容器用于存放香料?

  • 如果是,那不是使用pagerAdapter的方法。您应该看到this link。它是Java语言,但您可以轻松地使其适应Kotlin。
  • 如果没有,我不确定您要做什么,但我认为 ViewPager是您所需要的。

如果只想单击即可切换片段,只需使用FrameLayout即可显示所需的片段,并通过事务在它们之间切换。我对Kotlin不熟悉,但是类似的东西应该可以工作。

private fun switchScreens(i: Integer) {

    val fragment;

    when (i) {
        0 -> fragment = WelcomeFragment.newInstance()
        1 -> fragment = LanguageSelectFragment.newInstance()
    }

    val fragmentManager = supportFragmentManager
    val fragmentTransaction = fragmentManager.beginTransaction()
    fragmentTransaction.replace(R.id.main_view_pager, fragment)
    fragmentTransaction.commit()
}

如果您想将一个片段滑到另一个片段,则可以使用ViewPager(请参见上面的链接)。

最佳