ListActivity и диалоги - PullRequest
       6

ListActivity и диалоги

0 голосов
/ 24 декабря 2011

У меня есть ListActivity, который требует обработки большого количества данных с помощью Thread. Я хочу показать Dialog, пока работа выполняется в background. Тем не менее, Dialog не отображается, пока представление не будет загружено. Я использую этот подход на обычном activity, и он работает (Dialog всплывает, рабочий запускается, рабочий заканчивается, Dialog закрывается) Когда работа завершена, отправляется сообщение handler для загрузки view и отклонения Dialog.

Вот мой код:

@Override
public void onCreate(Bundle icicle) {

    super.onCreate(icicle); 
    initViewProperties();
    dialogCode = 0;
    showDialog(dialogCode);

}

@Override
protected Dialog onCreateDialog(int id) {

    int resID = getResources().getIdentifier(getCfrFile(), "raw", getPackageName());        
    progDialog = new ProgressDialog(this);

    switch (dialogCode) {
        case 0:
            progDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);  
            progDialog.setMessage(getCurrentTitle());
            break;
        case 1:
            progDialog.setMessage("Loading CFR");
            break;

        default:
            break;
    }       

    try {
        // do the work here
        xmlListRowFactoryHelper = new AcmListViewFactoryHelper(handler, resID, this, xpathBuilder(false), "title") ;
        xmlListRowFactoryHelper.run();

    } catch (Exception e) {

        e.printStackTrace();
    }

    return progDialog;

}   

final Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {

        int total = msg.getData().getInt("total");            

        progDialog.setProgress(total);

        if (total <= 0){

            xmlListRowFactoryHelper.setState(AcmTableRowFactoryHelper.DONE);
            // load the view here
            loadListView();    
        }
    }
}

Ответы [ 2 ]

1 голос
/ 24 декабря 2011

использование Asyntask концепция, которая устраняет сложную концепцию потоков http://developer.android.com/reference/android/os/AsyncTask.html

пример http://www.vogella.de/articles/AndroidPerformance/article.html

1 голос
/ 24 декабря 2011

Используйте AsyncTask для этого, это приятно и просто.Смотрите пример и объяснение здесь: http://developer.android.com/reference/android/os/AsyncTask.html

...