【问题标题】:How to disable tabs in Kotlin?如何禁用 Kotlin 中的选项卡?
【发布时间】:2019-05-04 14:49:29
【问题描述】:
        val receiptDetails = headerView.findViewById(R.id.tb_receipt_details) as TextView
        val paymentDetails = headerView.findViewById(R.id.tb_payment_details) as TextView
        val invoiceDetails = headerView.findViewById(R.id.tb_invoice_details) as TextView
        val summary = headerView.findViewById(R.id.tb_summary) as TextView

        tabLayout!!.getTabAt(0)!!.setCustomView(receiptDetails)
        tabLayout!!.getTabAt(1)!!.setCustomView(paymentDetails)
        tabLayout!!.getTabAt(2)!!.setCustomView(invoiceDetails)
        tabLayout!!.getTabAt(3)!!.setCustomView(summary)

        tabLayout!!.getChildAt(1).setEnabled(false)

这里我调用tabLayout!!.getChildAt(1).setEnabled(false)时出现空指针异常。如何禁用 Kotlin 中的特定选项卡。提前致谢。

日志猫

12-03 10:03:27.536 7899-7899/com.salesrep.auxxa.alliontechnologies.auxxasr E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.salesrep.auxxa.alliontechnologies.auxxasr, PID: 7899
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.salesrep.auxxa.alliontechnologies.auxxasr/com.salesrep.auxxa.alliontechnologies.auxxasr.NewPaymentActivity}: kotlin.KotlinNullPointerException
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
    at android.app.ActivityThread.access$800(ActivityThread.java:144)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5221)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
 Caused by: kotlin.KotlinNullPointerException
    at com.salesrep.auxxa.alliontechnologies.auxxasr.NewPaymentActivity.onCreate(NewPaymentActivity.kt:84)
    at android.app.Activity.performCreate(Activity.java:5937)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)

【问题讨论】:

标签: android kotlin


【解决方案1】:

改成

tabLayout!!.getChildAt(1).setEnabled(false)

到

tabLayout!!.getChildAt(1).isEnabled = false

并且 Activity 没有在清单中注册。注册它。

【讨论】:

    【解决方案2】:

    由于您使用的是自定义视图,您可以通过使用触摸事件来禁用选项卡:

    val view = tabLayout.getTabAt(1)!!.customView.parent as View;
    view.setOnTouchListener { v, event -> true }
    

    【讨论】:

    • 嗨,isEnabled 不支持 tabLayout.getTabAt(1)
    • @RajithaPerera 抱歉,误读了您的问题。我认为您可以通过在触摸侦听器上返回 true 来禁用选项卡,或者您也可以在父视图上尝试 isEnabled = false。
    • 一个问题?需要时如何启用此选项卡?
    • 尝试view.setOnTouchListener(null) 或view.setOnTouchListener { v, event -> false } 重新启用它。
    • 谢谢你拯救我的一天
    【解决方案3】:

    使用这个:

    (tabLayout!!.getChildAt(0) as ViewGroup).getChildAt(1).setEnabled(false)
    

    tabLayout!!.getChildAt(0) as ViewGroup 是包含子视图的ViewGroup。

    【讨论】:

      【解决方案4】:

      声明活动

      var touchableList: ArrayList<View>? = ArrayList()
      

      禁用所有标签

      touchableList = tabLayout?.touchables
      touchableList?.forEach { it.isEnabled = false }
      

      启用标签

      touchableList?.get(0)?.isEnabled = true
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-12
        • 2011-05-28
        • 1970-01-01
        相关资源
        最近更新 更多