gpt4 book ai didi

java - 从另一个线程调用adapter.notifyDataSetChanged()

转载 作者:行者123 更新时间:2023-12-02 03:34:45 28 4
gpt4 key购买 nike

我想从另一个线程调用adapter.notifyDataSetChanged()。我读到我应该使用 AsyncTask 并在执行后执行 adapter.notifyDataSetChanged()

我必须仅在当前 Activity (可能是父 Activity 或子 Activity )上每 5 秒执行一次 AsyncTask,因为只有一个 Activity 可以同时执行异步任务。

我是否应该创建一个每 5 秒执行一次 AsyncTaskTimerTask,当我启动另一个 Activity 时停止它并在 onResume 中重新启动它?

这是我更新当前 Activity 的 ListView 的线程代码。

private void runEventHandler() {
new Thread() {
public void run() {
while (true) {
try {
runOnUiThread(new Runnable() {

@Override
public void run() {
users.add(new User(10, "a", false));
adapter.notifyDataSetChanged();
}
});
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}

现在,当添加新用户时,我必须能够更新子 Activity 的 ListViews

最佳答案

一种可能的方法是在两个 Activity 中创建一个标志来控制要运行的线程(以下代码不可运行,只是为了了解您可以做什么的示例):

Activity A
{
public static boolean stopThread = false;
@Override
public void onResume()
{
super.onResume();
// put your code here...
stopThread =false;
runEventHandler();
}
private void runEventHandler() {
new Thread() {
public void run() {
while (A.stopThread != false) {
try {
runOnUiThread(new Runnable() {

@Override
public void run() {
users.add(new User(10, "a", false));
adapter.notifyDataSetChanged();
}
});
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}


@Override
protected void onStop(){
super.onStop();
stopThread =true;
}

}



Activity B
{
public static boolean stopThread = false;
@Override
public void onResume()
{
super.onResume();
// put your code here...
stopThread =false;
runEventHandler();
}
private void runEventHandler() {
new Thread() {
public void run() {
while (B.stopThread != false) {
try {
runOnUiThread(new Runnable() {

@Override
public void run() {
users.add(new User(10, "a", false));
adapter.notifyDataSetChanged();
}
});
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}


@Override
protected void onStop(){
super.onStop();
stopThread =true;
}

}

您还可以使用onPause()代替onStop()。取决于您的程序概念。

关于java - 从另一个线程调用adapter.notifyDataSetChanged(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37574634/

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