在 TabLayout 中通过索引识别标签

Identify tabs by index in TabLayout

我正在使用我从网络上获得的名称及其对应的 ID 动态创建标签 API:

    private fun getCategories() {
        val url = "http://192.168.1.45/companyweb/get_categories"
        val rq = Volley.newRequestQueue(this)
        val jar = JsonArrayRequest(Request.Method.GET,url,null,Response.Listener { response ->

            for (x in 0..response.length()-1) {
                val category = Category(response.getJSONObject(x).getString("id"), response.getJSONObject(x).getString("name"))
                categoryList.add(category)
                val newTab = navigationTabs.newTab()
                newTab.text = categoryList[x].name.toString()
                navigationTabs.addTab(newTab)
            }
        }, Response.ErrorListener { error -> Log.d("HAVERI", error.toString()) })
        rq.add(jar)
    }

一旦用户选择了其中一个选项卡,我想知道它对应于哪个类别。但是我唯一能得到的就是它的R.id 比如:

com.google.android.material.tabs.TabLayout$Tab@90eb7ca

我正在使用导航选项卡侦听器:

navigationTabs.addOnTabSelectedListener(object: TabLayout.OnTabSelectedListener {
    override fun onTabReselected(p0: TabLayout.Tab?) {
    }

    override fun onTabUnselected(p0: TabLayout.Tab?) {

    }

    override fun onTabSelected(p0: TabLayout.Tab?) {
        Log.d("TAG", "tab selected is " + p0.toString())
    }
})

有没有办法 "mark" 每个添加的标签都有一个索引或另一个自定义标识符,这样我以后可以在选择它时识别它。在侦听器中使用 p0 没有帮助。

您可以将网络 ID 附加为 标签TabLayout.Tab 有函数 setTag(Object).

假设您将网络 ID 作为 String 值传入,然后在 TabLayout.OnTabSelectedListener 的函数中您可以通过调用

检索标签
val tag = p0.getTag() as String