android 从子片段访问KotlinViewpager2

svmlkihl  于 2023-02-17  发布在  Android
关注(0)|答案(1)|浏览(108)

我有3个片段。(父片段,A片段,B片段)。父片段有一个视图页,视图页允许在片段A和B之间切换。我想使用片段b中的按钮返回片段a。但是视图页在父片段中。我该怎么做?

这是我的父片段:

class ParentFragment : Fragment() {
    private lateinit var binding: FragmentLoginRegisterBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        binding = FragmentLoginRegisterBinding.inflate(inflater, container, false)
        return binding.root

    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        setAdapter()

    }

    fun setAdapter(activity: MainActivity) {
        val tabArrayList = arrayOf("Login", "Register")
        val adapter = TablayoutAdapter(requireActivity(), tabArrayList.size)
        binding.apply {
            viewPager.adapter = adapter

            TabLayoutMediator(tabLayout, viewPager) { tab, position ->
                tab.text = tabArrayList[position]
            }.attach()
        }

    }

}

这是我的视图寻呼机:

class TablayoutAdapter(fm : FragmentActivity, var totalTabs : Int) : FragmentStateAdapter(fm) {
    override fun getItemCount(): Int {
        return totalTabs
    }

    override fun createFragment(position: Int): Fragment {
        return when(position){
            0->{
                FragmentA()
            }
            1->{
                FragmentB()
            }
            else->{
                FragmentA()
            }
        }
    }
}

这是我的A片段:

class FragmentA() : Fragment(){

    private lateinit var binding : FragmentABinding

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

    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        binding = FragmentA.inflate(inflater,container,false)
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

    }

}

这是我的B片段:

class FragmentB() : Fragment(){

    private lateinit var binding : FragmentBBinding

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

    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        binding = FragmentRegisterBinding.inflate(inflater,container,false)
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        binding.btn.setOnClickListener{
        //--> Goto ViewPager Item 0
       }

    }

}
f1tvaqid

f1tvaqid1#

您需要先找出选项卡布局的参考。

binding.btn.setOnClickListener{
    tabs = activity.findViewById(R.id.myTabLayout)
    tabs.getTabAt(0).select()
}

将其写入onClickListener()内的片段B中

相关问题