我有一个扩展ListActivity并设置适配器的类,以及一个使用来自DB的数据填充视图的适配器类。我希望在填充视图时在List活动类中添加一个进度对话框程序,并将耗时的任务包装在异步内部类中。
我想知道实现异步任务的最佳位置在哪里,我计划在执行前执行对象进度并在执行后执行。
代码表单列表活动类onCreate:
data = new diveDataBase(this);
data.open();
cursor = data.getCursorData();
//check if data available
if(cursor!=null && cursor.getCount()>0){
// get customised array adoater list
adapter = new ItemAdapter(this, cursor);
this.setListAdapter(adapter);
data.close();
}
并且适配器类绑定视图方法,并将光标对象作为参数传递:
String diveSite = c.getString(c.getColumnIndexOrThrow(diveDataBase.KEY_DIVESITE));
String date = c.getString(c.getColumnIndexOrThrow(diveDataBase.KEY__DIVEDATE));
String diveNumber= c.getString(c.getColumnIndexOrThrow(diveDataBase.KEY__DIVENUMBER));
String diveImagePath = c.getString(c.getColumnIndex(diveDataBase.KEY_DIVEPICTURE));
String rating = c.getString(c.getColumnIndexOrThrow(diveDataBase.KEY_DIVERATING));
/**
* Next set the dive site name
*/
TextView title_text = (TextView) v.findViewById(R.id.tv_DiveSiteListView);
if (title_text != null) {
title_text.setText(diveSite);
}
//populate another textview and image view etc
编辑:我的代码为aycnh类
所以我结束了包装代码,以便在后台运行中获取数据库光标并创建适配器并在后执行中设置它,这是最好的方法,因为此时数据库不是很大足以测试:
@Override
protected Cursor doInBackground(Void... params) {
> ViewListOfDives.data = new diveDataBase(ViewListOfDives.this);
> ViewListOfDives.data.open();
> // get cursor object holding all data, use a asynch inner class to load
> cursor = data.getCursorData();
>
>
> return cursor;
}
> @Override
protected void onPostExecute(Cursor cursor) {
if(pd.isShowing()){
> pd.dismiss(); }
> //check if data available
> if(cursor!=null && cursor.getCount()>0){
> // get customised array adoater list
> adapter = new ItemAdapter(ViewListOfDives.this, cursor);
> }else{
>
> //display o dives in data base message and finish this activity
> displayDialog();
>
> }
> ViewListOfDives.this.setListAdapter(adapter);
> ViewListOfDives.data.close(); super.onPostExecute(cursor); }
>
>
>
>
答案 0 :(得分:1)
我通常在onResume()中执行此操作,然后将结果传递给Handler,以更新List的Adapter。如果您不需要多次刷新数据,如果有人回到堆栈中的Activity,您可以在onCreate()中执行此操作。