Как выполнять команды после вызова setContentView - PullRequest
0 голосов
/ 10 марта 2012

Я использую «включить» в моем основном макете.Каждый из них представляет собой RelativeLayout, для которого требуется подключить прослушиватель OnClick и обновить некоторую информацию, связанную.Поэтому я попытался сделать это просто:

setContentView(R.layout.allobjects);
    ObjectListeners objectListeners = new ObjectListeners(objects);
    for(int i=0;i<1;i++)
    {           
        RelativeLayout objectBoxRelativeLayout = (RelativeLayout)findViewById(R.id.object1 + i);            
        objectBoxRelativeLayout.setOnClickListener(objectListeners.GetObjectListener(i));
        SomeObject currentObject = this.objects.get(i); 
        Object viewObject = findViewById(R.id.object1 + i);
        this.setObjectView(viewObject, currentObject);          
    } 

Проблема в том, что это занимает слишком много времени после "setContentView (R.layout.allobjects);"команда, и приложение показывает черный экран, пока не закончит загрузку.Кроме того, я использую "setContentView (R.layout.allobjects);"после того, как я выполню вышеуказанные команды.Все эти команды должны быть написаны после "setContentView (R.layout.allobjects);".

Как я могу справиться с такой ситуацией?Должен ли я использовать onPreExecute и реализовать AsyncTask?

1 Ответ

0 голосов
/ 10 марта 2012

Да, AsyncTask - хорошее решение для отображения диалога загрузки во время выполнения этих команд.

UPDATE:

Добавьте этот класс под вашу onCreate() функцию:

 private class MyTask extends AsyncTask<Void, Void, Void> {

            private ProgressDialog dialog;
            private Context context;

            public MyTask(Activity activity) {
                context = activity;
                dialog = new ProgressDialog(context);
            }

            protected void onPreExecute() {
                dialog.setTitle("Loading...");
                dialog.setMessage("Loading...");
                dialog.show();

            }

            @Override
            protected Void doInBackground(Void... params) {
            //do your code here in background


             protected void onPostExecute(Void res) {
                 dialog.dismiss();  

             }
}

затем используйте задачу внутри onCreate(), например:

    MyTask mt = new MyTask(this);
    mt.execute();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...