【问题标题】:Fragment disappearing when called from PagerAdapter从 PagerAdapter 调用时片段消失
【发布时间】:2019-04-02 04:03:58
【问题描述】:

我有一个带有 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 位置,点击后会检索到该标签以拉出正确的 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 {

                }
            }
    }
}

【问题讨论】:

    标签: android android-fragments kotlin


    【解决方案1】:

    你有一个 ViewPager 容器来存放你的 framgents 吗?

    • 如果是,那不是使用 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(见上面的链接)。

    最好的

    【讨论】:

    • 我想要通过按钮单击直接从一个片段到另一个片段的幻灯片动画,但我不希望用户能够在没有按钮的情况下滑动它。编辑:并且 FrameLayout 工作。谢谢。
    • 所以你必须使用FrameLayout 和一些动画,但我认为你做到了;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    相关资源
    最近更新 更多