响应Activity中的ViewPager2 Fragments事件
Posted
技术标签:
【中文标题】响应Activity中的ViewPager2 Fragments事件【英文标题】:Responding to ViewPager2 Fragments Events in Activity 【发布时间】:2021-09-19 01:12:00 【问题描述】:我有一个包含 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)
谢谢!
【问题讨论】:
【参考方案1】:片段的内部动作
val main = this.activity!! as MainActivity
main.callSomeFunc()
【讨论】:
自我是什么?返回片段中的错误 但必须在onViewCreated
中,因此片段知道该布局【参考方案2】:
你可以在特定的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()
【讨论】:
以上是关于响应Activity中的ViewPager2 Fragments事件的主要内容,如果未能解决你的问题,请参考以下文章
RecyclerView扩展(一)ViewPager2使用与原理浅析