【发布时间】:2014-03-26 07:49:55
【问题描述】:
我有一个非常大的列表,我将其设置为在不同的线程中生成。
Thread t = new Thread(new Runnable() {
@Override
public void run() {
getTheList(); //a method in my class which generates Arraylist<> list.
}
});
t.start();
现在我使用 Timer 任务来调度列表以每 5 秒填充一次。
class task extends TimerTask {
public void run() {
ArrayList<HashMap<String, String>> list = ListViewActivity.this.getList();
String[] from = {"date","sname","bname","contrno","item","quantity","rate"};
int[] to = {R.id.textViewSRdate,R.id.textViewSRSname,R.id.textViewSRBname,R.id.textViewSRcontrNo,R.id.textViewSRitem,R.id.textViewSRquantity,R.id.textViewSRrate};
adapter = new SimpleAdapter(getApplicationContext(), list ,R.layout.some_row, from, to);
listView.setAdapter(adapter);
}
}
Timer timer = new Timer();
timer.schedule(new task(), 5000, 3000);
它说“只有创建视图层次结构的原始线程才能接触它的视图。”当我想在任务类中为我的列表视图设置适配器时。 “listView.setAdapter(适配器)” 我只想让列表每隔 X 秒自动加载一次新数据。 这应该怎么做?
【问题讨论】:
-
您正在另一个线程中更新 UI..这是不可接受的..使用处理程序而不是计时器..
-
您不应更改适配器,而应编辑其数据。这可以在任何线程中完成。
-
@Pietu1998 但在更新适配器数据后,我应该再次设置适配器......并且在相同的时间间隔内。
-
@donison24x7 你应该有一个对适配器的引用,并在更改数据而不是设置适配器后调用 notifyDataSetChanged(),参考:developer.android.com/reference/android/widget/…
-
没有。适配器的全部目的是在您更新数据时自动更新视图。
标签: android multithreading listview