如何解决Activity中响应ViewPager2 Fragments事件
我有一个主要活动,其中包含一个 ViewPager2 和一个 TabLayout 来容纳一些片段。每个片段都有我想在主活动中触发操作的按钮。但是,我没有看到如何设置按钮/事件处理程序,以便每当在其中一个片段内按下按钮时都会通知主活动。谢谢!
MenuActivity.kt - ViewPager2/TabLayout 设置
private fun configureMenu() {
// Create adapter
val fragmentAdapter = PageAdapter(supportFragmentManager,lifecycle)
// Add fragments
fragmentAdapter.addFragment(CameraFragment(),getString(R.string.camera_tab))
fragmentAdapter.addFragment(DevicesFragment(),getString(R.string.devices_tab))
fragmentAdapter.addFragment(ConnectionFragment(),getString(R.string.connection_tab))
// Set up pageviewer
viewpager_menu.adapter = fragmentAdapter
TabLayoutMediator(tablayout_main,viewpager_menu) { tab,position ->
tab.text = fragmentAdapter.getPageTitle(position)
viewpager_menu.setCurrentItem(tab.position,true)
}.attach()
}
PageAdapter.kt
class PageAdapter(fm: FragmentManager,lifecycle: Lifecycle): FragmentStateAdapter(fm,lifecycle) {
private var fragmentList = ArrayList<Fragment>()
private var fragmentTitleList = ArrayList<String>()
fun addFragment(fragment: Fragment,title: String) {
fragmentList.add(fragment)
fragmentTitleList.add(title)
}
override fun onAttachedToRecyclerView(recyclerView: RecyclerView) {
super.onAttachedToRecyclerView(recyclerView)
}
override fun getItemCount(): Int {
return fragmentList.size
}
override fun createFragment(position: Int): Fragment {
return fragmentList[position]
}
fun getPageTitle(position: Int): String {
return fragmentTitleList[position]
}
}
CameraFragment.kt
class CameraFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_camera,container,false)
}
}
谢谢!
解决方法
片段的内部动作
val main = this.activity!! as MainActivity
main.callSomeFunc()
,
您可以在特定的frament构造函数中传递activity的this对象,并使用from fragment来调用activity类的方法
例如:
class MenuActivity : AppCompatActivity(){
fragmentAdapter.addFragment(CameraFragment(this),getString(R.string.camera_tab))
}
class CameraFragment : Fragment {
var mActivity: MenuActivity? = null
constructor(mActivity: MenuActivity?) {
this.mActivity = mActivity
}
override fun onCreateView(inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_camera,container,false)
onlick{
mActivity.callMethodOfMenuActivity()
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。