【问题标题】:android Kotlin: tab long click listenerandroid Kotlin:标签长按监听器
【发布时间】:2019-08-29 03:36:24
【问题描述】:

我正在努力解决如何在我的标签上实现长按。我尝试了一些不同的方法,但似乎都不起作用。

我确信它可能是基本的,或者我根本不理解 tablayout 和寻呼机的点击。

我在这里发现了一些问题,但它们并不是指长按。

这是我尝试过的一些事情。

    main_tab_pager.iterator().forEach {
        view ->
        view.setOnLongClickListener{
            Toast.makeText(applicationContext, "....", Toast.LENGTH_LONG).show()
            true
        }
   main_tabs.setOnLongClickListener { 
        when(main_tabs.selectedTabPosition) {
            0-> Toast.makeText(applicationContext, "tab 0", Toast.LENGTH_LONG).show()
            1-> Toast.makeText(applicationContext, "tab 1", Toast.LENGTH_LONG).show()
            2-> Toast.makeText(applicationContext, "tab 2", Toast.LENGTH_LONG).show()
        }
        true 
    }

    main_tab_pager.setOnLongClickListener {
        when(main_tab_pager.currentItem) {
            0-> Toast.makeText(applicationContext, "tab 0", Toast.LENGTH_LONG).show()
            1-> Toast.makeText(applicationContext, "tab 1", Toast.LENGTH_LONG).show()
            2-> Toast.makeText(applicationContext, "tab 2", Toast.LENGTH_LONG).show()
        }
        true
    }

选项卡/寻呼机设置代码。

main_tab_pager.adapter = TabAdapter(supportFragmentManager, sections)
    main_tabs.setupWithViewPager(main_tab_pager)

标签适配器

class TabAdapter(fragmentManager: FragmentManager, private val sections: 
Array<BaseFragment>) : FragmentPagerAdapter(fragmentManager) 
{
    override fun getItem(position: Int): Fragment {
        return sections[position]
    }

    override fun getCount(): Int {
        return sections.size
    }

    override fun getPageTitle(position: Int): CharSequence? {
        return sections[position].title
    }
}

【问题讨论】:

  • 也许这会有所帮助 -> stackoverflow.com/a/6050655/2751783
  • 既然你在做setupWithViewPager(),唯一的方法(不修改TabLayout)是手动遍历标签Views,并设置OnLongClickListener on每一个。但是,那些Views 不是TabLayout 的直接子代。它们嵌套在另一个 View 中,因此您必须遍历 TabLayout 的第一个孩子的孩子。
  • @MikeM。好的,那很好,但是我该怎么做呢?我似乎能够使用 main_tabs[0] 或 getchildat(0) 来获取孩子,但它似乎没有生成一个视图组来迭代。
  • 您必须将其转换为 ViewGroup
  • 谢谢@MikeM。我想通了。

标签: android kotlin android-tablayout


【解决方案1】:

感谢 Mike M.

   val tabs = main_tabs.getChildAt(0) as LinearLayout

    for (i in 0 until tabs.childCount) {
        when(i){
            0 -> tabs.getChildAt(0).setOnLongClickListener {
                Toast.makeText(baseContext, "tab 0 ", Toast.LENGTH_LONG).show()
                true
            }
            1 -> tabs.getChildAt(1).setOnLongClickListener {
                Toast.makeText(baseContext, "tab 1", Toast.LENGTH_LONG).show()
                true
            }
            2 -> tabs.getChildAt(2).setOnLongClickListener {
                Toast.makeText(baseContext, "tab 2", Toast.LENGTH_LONG).show()
                true
            }
        }
    }

【讨论】:

  • as ViewGroup 就足够了。它确实是LinearLayout 子类,但在其他版本中可能会发生变化。仅供参考。干杯!
猜你喜欢
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
  • 2021-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多