Android 处理程序 java 到 kotlin
Android handler java to kotlin
我正在尝试在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工作室这样转换
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)
}
}
}
error:This 处理程序 class 应该是静态的,否则可能会发生泄漏(匿名 android.os.Handler)
通过覆盖 Handler
的 public void handleMessage(Message msg)
,您创建了一个 anonymous
class。简而言之,处理程序存在的时间很可能比封闭的 class 长。这是不行的,因为内部 class 被外部 class 引用。最简单的解决方法是在 extends
Handler
和 override handleMessage(Message msg)
中创建一个单独的 class
,而不是在另一个 class.
的内部
EDIT 涉及任何 Android OS 特定的 classes Fragments/Activities...
anonymous
classes 不起作用,因为您不将 args
传递给 fragments
.
的构造函数的原因相同
我找到了一个很好的解决方案。
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)}
}
首先,这个实现过于复杂。只需使用一个标准的处理程序,而不对其进行子类化和修改它处理消息的方式。您可以 post 一个 Runnable 来代替它。那么您也不必担心消息代码。
private val handler = Handler(Looper.getMainLooper())
override fun showAds(show: Boolean) = handler.post {
adView.visibility = if (show) View.VISIBLE else View.GONE
}
我正在尝试在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工作室这样转换
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)
}
}
}
error:This 处理程序 class 应该是静态的,否则可能会发生泄漏(匿名 android.os.Handler)
通过覆盖 Handler
的 public void handleMessage(Message msg)
,您创建了一个 anonymous
class。简而言之,处理程序存在的时间很可能比封闭的 class 长。这是不行的,因为内部 class 被外部 class 引用。最简单的解决方法是在 extends
Handler
和 override handleMessage(Message msg)
中创建一个单独的 class
,而不是在另一个 class.
EDIT 涉及任何 Android OS 特定的 classes Fragments/Activities...
anonymous
classes 不起作用,因为您不将 args
传递给 fragments
.
我找到了一个很好的解决方案。
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)}
}
首先,这个实现过于复杂。只需使用一个标准的处理程序,而不对其进行子类化和修改它处理消息的方式。您可以 post 一个 Runnable 来代替它。那么您也不必担心消息代码。
private val handler = Handler(Looper.getMainLooper())
override fun showAds(show: Boolean) = handler.post {
adView.visibility = if (show) View.VISIBLE else View.GONE
}