关于您可以轻松使用View.post
的视图,我有一个问题但是示例
在像adapter.notifyDataSetChanged()
这样的适配器中你怎么能使用view.post,
示例即时更新我的列表视图,这是使用此代码的更佳实践
mAdapter = new HomePageAdapter(this, list);
mListView.setAdapter(mAdapter);
mAdapter.notifyDataSetChanged();
这种风格是最佳做法:
runOnUiThread
mAdapter = new HomePageAdapter(this, list);
HomePage.this.runOnUiThread(new Runnable() {
@Override
public void run() {
mListView.setAdapter(mAdapter);
mAdapter.notifyDataSetChanged();
}
});
的AsyncTask
class updates extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... arg0) {
mAdapter = new HomePageAdapter(HomePage.this, defaultListVal);
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
mListView.setAdapter(mAdapter);
mAdapter.notifyDataSetChanged();
}
}
处理程序
handler = new Handler() {
public void handleMessage(Message msg) {
mListView.setAdapter(mAdapter);
mAdapter.notifyDataSetChanged();
}
};
class update implements Runnable {
@Override
public void run() {
mAdapter = new HomePageAdapter(HomePage.this, defaultListVal);
handler.sendEmptyMessage(0);
}
}
答案 0 :(得分:1)
每个人都有不同的功能:
Which of this style is best practice:
<强> runOnUiThread 强>
只有当你在不同的线程上时才使用它,因为创建此视图的线程只能调用/更新该视图,如果你在不调用其父线程的情况下在另一个线程上更新它,那么你将得到一个{ {1}}
<强>的AsyncTask 强>
当您进行网络连接,在CPU上进行繁重操作等会阻塞主线程时使用此功能。
<强>处理程序强>
与它将调用主线程的CalledFromWrongThreadException
相同,runOnUiThread
总是由其父线程调用,在那里实例化它。