2013-02-08 2 views
0

Привет Я выполняю операцию с экрана B. После операции я показываю один диалог предупреждения. Как только пользователь нажимает кнопку ОК в этом диалоговом окне, он переходит к экрану A. Это происходит через Intent.Как выполнить асинхронную задачу до/после открытия экрана в Android?

Экран A содержит список. Список заполняется через активность списка и адаптер массива.

Мне нужно, чтобы обновить список, вызвав задачу асинхронной до или после открытия экрана А.

Как это сделать?

+0

Вместо этого используйте вместо этого погрузчики. – dymmeh

+0

Это не будет поддерживать в версии 2.2 справа? – MidhunVP

+0

Будет. Вы должны использовать библиотеку поддержки для этого. – dymmeh

ответ

0

Лучший способ сделать это - создать экземпляр AsyncTask в методах onResume() или onCreate(). Затем в методе doInBackground класса AsyncTask вы можете загрузить данные, необходимые для listView в некотором массиве. Finnaly, в onPostExecute() вы должны создать экземпляр своего адаптера с данными, которые у вас есть в массиве, а затем назначить его в listView. Что-то вроде этого:

ProgressDialog pd; 
ArrayAdapter<String> adapter; 
ArrayList<String> dataStrings; 

@Override 
public void onResume() { 
     dataStrings = new ArrayList<String>(); 
     pd = new ProgressDialog(context); 
     new MyAsyncTask().execute(params); 
} 

public class MyAsyncTask extends AsyncTask<String, Boolean, ArrayList<String>> { 

    @Override 
    protected void onPreExecute() 
    { 
     pd = new ProgressDialog(context); 
     pd.setTitle(EsCache.instance.getLangItem("LABEL_PLEASE_WAIT")); 
     pd.setMessage(EsCache.instance.getLangItem("LABEL_LOADING_DATA")); 
     pd.setCancelable(true); 
     pd.show(); 
    } 

    @Override 
    protected ArrayList<String> doInBackground(String... params) { 
     // TODO Auto-generated method stub 

       dataStrings = SomeMethodGetData(); // returns data and stores it in list 
       return dataStrings; 
    } 


    @Override 
    protected void onPostExecute(ArrayList<String> list) { 
       adapter = new ArrayAdapter<String>(context, 
       android.R.layout.simple_list_item_1, dataStrings); 

       listView.setAdapter(adapter); 
     pd.dismiss(); 
    } 


} 

Это просто самый простой демонстрацией, но она получает работу, он не сильно отличается, если вы используете какой-то пользовательский адаптер. Вы должны быть осторожны, хотя вы не смешиваете что-то и пытаетесь изменить что-то, что связано с пользовательским интерфейсом от doInBackground() :) Я надеюсь, что это вам поможет.

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