gpt4 book ai didi

java - Android Handler 刷新 GUI

转载 作者:行者123 更新时间:2023-12-02 04:56:38 24 4
gpt4 key购买 nike

在执行 parseURL ASyncTask 类并将 Arraylist 返回到 MainActivity 以在 gridview 上打印后,我尝试创建一个 UI 处理程序来刷新 gridview。

我编译并运行的代码没有任何错误,但单击按钮后 GridView 不会刷新。在调试器中,它显示 parseURL 类成功返回列表,并且处理程序消息的 what 值为 1。但是处理程序似乎不起作用。

主要 Activity 类

private final Handler handler = new Handler() {
public void handleMessage(Message msg) {
if(msg.what == 1) {
List<String> list = (List) msg.obj;
updateUI(list);
}
}
}

public void onButtonClick(View v) {
EditText text = (EditText)findViewById(R.id.editText1);
String id = text.getText().toString();

new parseURL() {
@Override
protected void onPostExecute(List<String> list) {
handler.obtainMessage(1, list);
}
}
}

private void updateUI(List<String> list) {
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);

GridView grid = (GridView)findViewById(R.id.gridView1);
grid.setAdapter(adapter);
adapter.notifyDataSetChanged();
//grid.invalidateViews();
}

最佳答案

试试这个代码。

private final Handler handler = new Handler();

public void onButtonClick(View v) {
EditText text = (EditText)findViewById(R.id.editText1);
String id = text.getText().toString();

new parseURL() {
@Override
protected void onPostExecute(List<String> list) {
handler.post(new Runnable() {
@Override
public void run() {
updateUI(list);
}
})
}
}
}

或者

private final Handler handler = new Handler() {
public void handleMessage(Message msg) {
if(msg.what == 1) {
List<String> list = (List) msg.obj;
updateUI(list);
}
}
}

public void onButtonClick(View v) {
EditText text = (EditText)findViewById(R.id.editText1);
String id = text.getText().toString();

new parseURL() {
@Override
protected void onPostExecute(List<String> list) {
handler.obtainMessage(1, list).sendToTarget();
}
}
}

如果你想使用obtainMessage和handleMessage方法对,你应该调用sendToTarget方法,就像这样handler.obtainMessage(1, list).sendToTarget()。 getMessage() 仅返回消息。

public final Message obtainMessage ()

在 API 级别 1 中添加从全局消息池中返回一条新消息。比创建和分配新实例更有效。检索到的消息的处理程序设置为此实例(Message.target == this)。如果您不需要该功能,只需调用 Message.obtain() 即可。

关于java - Android Handler 刷新 GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28710864/

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