действие загружает XML с сервера перед отображением с помощью TabActivity - PullRequest
1 голос
/ 21 ноября 2011

Я использую TabActivity с 4 отдельными Activities - по одному на каждую вкладку.

Один из Activities - это ListView, который имеет пользовательский ArrayAdapter.

Проблема в том, что когда я нажимаю клавишу Tab для перехода к этому представлению, Activity загружает содержимое до изменения представления, это выглядит так, как будто ничего не происходит в течение пары секунд, пока не будет загружена xml и разобрали и т. д.

Я искал пример, но это мое первое приложение для Android, и у меня возникают трудности с пониманием потока.

Может ли кто-нибудь указать мне какой-нибудь код, который позволит мне мгновенно изменить представление (я могу сообщить, что пользовательский контент загружается) при загрузке контента в фоновом потоке

спасибо

РЕДАКТИРОВАТЬ - я портирую код из существующего приложения для iOS - я не смог лучше сформулировать проблему, так как не понимал, как поток пользовательского интерфейса может быть заблокирован в этой ситуации, и из-за сложности существующий код и сроки я не хотел слишком сильно менять структуру.

Я сузил проблему до того, как увидел твой код, Дженнифер, но это решение я использовал, так что я отмечу твой как правильный.

вот что я использовал, если кому-то это поможет, мне пришлось поместить вызванную функцию, чтобы инициировать загрузку данных в фоновый поток, а затем отобразить содержимое, когда этот поток выполнил свою работу

Этот класс был объявлен в моем

public class TableView extends ListActivity

Мне было трудно обдумать то, чего я раньше не делал;)

public class GetContentTask extends AsyncTask<Void, Void, Void> {


    private ProgressDialog pdialog;

    @Override
    protected void onPreExecute(){ 
       super.onPreExecute();
       pdialog = new ProgressDialog(TableView.this);
       pdialog.setTitle(progressDialogTitle);
       pdialog.setMessage(progressDialogMessage);
       pdialog.show();    
    }

    @Override
    protected void onPostExecute(Void result){
       super.onPostExecute(result);
       setUpAndLoadList(); // the function to display the list and fill it with content
       pdialog.dismiss();
    }


    @Override
    protected Void doInBackground(Void... params) {
        doInitialLoad(); // The function to load any xml data from server
        return null;
    }
 }

Ответы [ 2 ]

0 голосов
/ 21 ноября 2011

Вы можете использовать Диалог прогресса (может сообщить, что пользовательский контент загружается)

ProgressDialog dialog;

private class XMLOperation extends AsyncTask<String, Void, String> {

/*
     * (non-Javadoc)
     * 
     * @see android.os.AsyncTask#onPreExecute()
     */
    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();

        System.out.println("onPreExecute");

        dialog= ProgressDialog.show(mContext, "", "Loading Content....");
              dialog.setCancelable(false);


    }




        @Override
    protected String doInBackground(String... urls) {

            //do your Background task

    }




protected void onPostExecute(String result) {   //dismiss dialog
        try {
if(dialog.isShowing()){
        dialog.dismiss();
        }



        } catch (Exception exception) {
        dialog.dismiss();
        }
        }
0 голосов
/ 21 ноября 2011

Использовать AsyncTask или (возможно) отдельный поток.

http://developer.android.com/reference/android/os/AsyncTask.html

Я бы также добавил свои 2 цента и сказал бы, что не используйте TabActivity. Просто имейте свои собственные кнопки, которые выглядят как вкладки, но это не очень важно для этой темы.

...