【问题标题】:Android handler java to kotlinAndroid 处理程序 java 到 kotlin
【发布时间】:2021-06-20 21:07:47
【问题描述】:

我正在尝试在 libgdx 中控制 admob。我找到了一些 java 代码,但我无法将 java 翻译成 kotlin。你能帮助我吗。谢谢。

private final int SHOW_ADS = 1;
    private final int HIDE_ADS = 0;
    protected AdView adView;


    Handler handler = new Handler(){


        @Override
        public void handleMessage(Message msg) {
            switch(msg.what){
                case SHOW_ADS:
                    adView.setVisibility(View.VISIBLE);
                    break;
                case HIDE_ADS:
                    adView.setVisibility(View.GONE);
                    break;
            }
        }
    };

Android studio 转换成这样

 var handler: Handler = object : Handler() {
        override fun handleMessage(msg: Message) {
            when (msg.what) {
                SHOW_ADS -> adView.setVisibility(View.VISIBLE)
                HIDE_ADS -> adView.setVisibility(View.GONE)
            }
        }
    }

错误:这个 Handler 类应该是静态的,否则可能会发生泄漏(匿名 android.os.Handler)

【问题讨论】:

  • “我总是出错”你需要准确地说出错误是什么。

标签: java android kotlin libgdx


【解决方案1】:

首先,这个实现过于复杂。只需使用标准处理程序,无需对其进行子类化并修改它处理消息的方式。您可以改为向其发布 Runnable。那么您也不必担心消息代码。

private val handler = Handler(Looper.getMainLooper())

override fun showAds(show: Boolean) = handler.post { 
    adView.visibility = if (show) View.VISIBLE else View.GONE
}

【讨论】:

    【解决方案2】:

    通过覆盖Handlerpublic void handleMessage(Message msg),您创建了一个anonymous 类。简而言之,处理程序的存在时间很可能比封闭类更长。这是不可以的,因为外部类引用了内部类。最简单的解决方法是在其中创建一个单独的 class extends Handleroverride handleMessage(Message msg) 而不是在其他类内部。

    当涉及到任何 Android 操作系统特定类时进行编辑 Fragments/Activities... anonymous 类不起作用,原因与您不将 args 传递给 fragments 的构造函数的原因相同。

    【讨论】:

      【解决方案3】:

      我找到了一个很好的解决方案。

      private val handler = object : Handler(Looper.getMainLooper()) {
      
              override fun handleMessage(msg: Message) {
                  when(msg.what){
                     SHOW_ADS->{adView.setVisibility(View.VISIBLE)} 
                      HIDE_ADS->{adView.setVisibility(View.GONE)}
      
      
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-11-12
        • 1970-01-01
        • 2020-09-28
        • 1970-01-01
        • 2022-01-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多