我有一个按钮。点击后,我刷新了一个清单。
我遇到了什么:
state_pressed 颜色停留很长时间(意味着UI线程被阻止)
(注意:按钮背景的定义如state_pressed =" true"颜色变化)
问题:
如何在不阻止用户界面的情况下单击按钮刷新列表?
我的代码:
mButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
refreshListView(data);
}
});
public void refreshListView(ArrayList data) {
// I am setting setNotifyOnChange() to false
// to prevent notifyDataSetChanged() to be triggered twice, by clear() and by addAll()
mArrayAdapter.setNotifyOnChange(false)
mArrayAdapter.clear();
mArrayAdapter.addAll(data);
// I am triggering notifyDataSetChanged() explicitely
mArrayAdapter.notifyDataSetChanged();
mListView.post(new Runnable() {
@Override
public void run() {
// this is to reset to the top of the list, after the list has been populated
mListView.setSelectionAfterHeaderView();
}
});
}
修改:
我想通过调用View.post()中的刷新代码解决了这个问题,但我想知道是否应该总是这样做:
mButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mListView.post(new Runnable() {
@Override
public void run() {
refreshListView(data);
}
});
}
});
答案 0 :(得分:0)
你的refreshList应该在ui线程上运行...并且新的Runnable应该与线程一起使用...如果你没有创建新的线程,你将使用Runnable作为一种匿名类...作为标准android这不是很好的做法...但是,如果这解决了你的问题,从技术上来说你的代码没有任何问题......