1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

TabLayoutで長押し(onLongClickListener)する。

Last updated at Posted at 2018-02-26

ViewであればsetOnLongClickListenerをセットすればよいのですが、TabLayoutにはそういったリスナーをセットするメソッドがありませんでしたので、長押し時のリスナーのセットのしかたを試してみました。※pagerは使いません。

ClickとLongClick

準備

val tabLayout = findViewById<TabLayout>(R.id.tab_layout)
tabLayout.apply {
    addTab(tabLayout.newTab().setText("タブ1"))
    addTab(tabLayout.newTab().setText("タブ2"))
}
<android.support.design.widget.TabLayout
    android:id="@+id/tab_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:tabIndicatorHeight="0dp"/>

Click

タブをタップしたときの処理はそのままリスナーがセットできます。

tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
    override fun onTabSelected(tab: TabLayout.Tab) {
        when (tab.position) {
            0 -> {/*タブ1のClick処理*/}
            1 -> {/*タブ2のClick処理*/}
        }
    }
    override fun onTabReselected(tab: TabLayout.Tab) {}
    override fun onTabUnselected(tab: TabLayout.Tab) {}
})

LongClick

長押しはそのままセットできなかったので、タブレイアウトからViewを取り出してセットします。

val tabs = tabLayout.getChildAt(0) as ViewGroup
for (i in 0 until tabs.childCount) {
    tabs.getChildAt(i).setOnLongClickListener {
        when (i) {
            0 -> {/*タブ1のLongClick処理*/}
            1 -> {/*タブ2のLongClick処理*/}
            else -> {}
        }
        false
    }
}

最後に

ふと使う必要がでたものの、こういった実装方法しか思いつきませんでした。
単にクリックしたいときも同じところを連続でタップすると1回目はonTabSelectedですが、二回目はonTabReselectedにコールバックするので普通のクリック処理も中のViewにリスナー付けたりしてます。
TabLayoutの使い方としてはあまり正しくないのかもしれないです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?