我想从另一个帖子中调用adapter.notifyDataSetChanged()
。我读到我应该使用AsyncTask
并在后执行中执行adapter.notifyDataSetChanged()
。
我必须每5秒仅对当前活动执行AsyncTask
(可能是父活动或子活动),因为只有一个活动可以同时执行asynctask。
我应该创建一个TimerTask
,每隔5秒执行一次AsyncTask
,当我开始另一项活动并在onResume
中重启时停止它吗?
以下是我更新当前活动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();
}
现在,我必须能够在添加新用户时更新子活动“ListViews
。
答案 0 :(得分:1)
你应该像下面的链接一样:https://examples.javacodegeeks.com/android/core/activity/android-timertask-example/
如果您在AsyncTask的doInBackground之类的其他线程中,则在UIThread上发布任何更改的代码:
runOnUiThread(new Runnable() {
@Override
public void run() {
// Here you can set your Ui Components
}
});
答案 1 :(得分:1)
一种可能的方法是在两个活动中创建一个标志来控制要运行的线程(以下代码不可运行只是示例,以了解您可以执行的操作):
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()
。取决于你的计划概念。