gpt4 book ai didi

android - 根据 Message 在 handleMessage 中动态更改 onClickListener

转载 作者:行者123 更新时间:2023-11-30 03:51:57 25 4
gpt4 key购买 nike

我有一个带有 Android.os.Handler 的 Activity ,用于与 openGL 线程通信。我想从 opengl 线程获取消息并根据消息数据在 Activity 中绘制一些 GUI,所以我这样做:

Handler handle = new Handler(new Handler.Callback(){
public boolean handleMessage(Message msg){
// update GUI like
TextView v1 = (TextView) GamescreenActivity .this.findViewById(R.id.mytextview)
// then what I actually would like to do but it does not work:
Button b = (Button) GamescreenActivity.this.findViewById(R.id.mybutton);
b.setOnClickListener(null);
if (msg.what == MY_OWN_CONSTANT) {
b.setOnClickListener(getOnClickDoSomething(msg));
}
}
View.OnClickListener getOnClickDoSomething(final Message msg) {
return new View.OnClickListener() {
public void onClick(View v) {
makeDialog(msg);
}
};
}
private void makeDialog(Message msg) {
AlertDialog.Builder builder = new AlertDialog.Builder(GamescreenActivity.this);
builder.setMessage("yo")
.setTitle(""+ msg.what);
AlertDialog dialog = builder.create();
dialog.show();
}

我希望很清楚我要实现的目标。我现在得到的是 makeDialog 方法中的 msg 几乎一直都是 null。

最佳答案

What I get by now is msg being null in the makeDialog methode almost all the time.

我相信发生这种情况时 Message 已经被回收了。让我们创建一个 msg 的本地副本并稍微修改您的代码以使其更高效。首先新建一个字段变量:

Message message;

接下来更改您的 if-else block :

if (msg.what == MY_OWN_CONSTANT) { 
message = Message.obtain(msg);
b.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(GamescreenActivity.this);
builder.setMessage("yo")
.setTitle(""+ message.what)
.show();
message.recycle(); // Recycle our message when we're done
}
});
}
else {
b.setOnClickListener(null);
}

关于android - 根据 Message 在 handleMessage 中动态更改 onClickListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14014128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com