2014-02-01 5 views
0

У меня есть класс, который расширяет ListActivity и устанавливает адаптер и класс адаптера, который заполняет представление данными из БД. Я хотел добавить программный диалог прогресса в класс активности List, поскольку представления были заполнены и завершают трудоемкие задачи в асинхронном внутреннем классе.Где поставить класс AysncTask в ListActivity

Мне интересно, где лучшее место для реализации задачи asynch, я планирую также включить прогресс диалога в pre Execute и post Execute.

код класса список форм деятельности 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 

Edit: Мой код для aycnh класса

Итак, я закончил u обертывание кода для получения курсора DB в режиме «Сделай-в-фоне» и создания адаптера и установки его в post-execute, это лучший способ как е DB на данный момент не достаточно большой, чтобы тест:

 @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);  } 
> 
> 
> 
> 

ответ

1

Я обычно делаю это в onResume() и затем результат передать сообщение обработчику, который обновляет адаптер списка. Если вам когда-либо понадобится обновлять данные более одного раза, если кто-то возвращается к Activity в стеке, вы можете сделать это в onCreate().

Смежные вопросы