Поместите метод в AsyncTask

У меня проблема calling методом. Я создал button, если я нажму на него, он запустит onClick(). Этот метод вызывает другие методы из up-class. В этих методах я установил layout на setContentView(R.layout...); два разных макета. На данный момент мой код очень быстро меняет макет на второй макет. Как я могу справиться с тем, что второй макет будет установлен только в том случае, если первый метод готов? Я знаю, что это должно быть что-то с asynch-tasks, но мне нужна помощь, чтобы справиться с этим.

Мой код:

public void do(int a) {
 method1();
 method2();
 }

Оба метода принадлежат суперклассу. Метод 1 должен установить ContentView (r.layout.1), а метод 2 — r.layout.2.


person basti12354    schedule 22.03.2014    source источник
comment
Где именно находится ваш AsyncTask?   -  person gatlingxyz    schedule 22.03.2014


Ответы (2)


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

public void do(int a) {
 method1();
new Handler().postDelayed(new Runnable() 
{

        @Override
        public void run() 
                {
            // TODO Auto-generated method stub
            try
            {
                method2();
            }
            catch(Exception e)
            {

                           Log.d("Exception",""+e.getMessage());
            }
        }
        }, 500);

 }
person Pavan    schedule 22.03.2014
comment
Спасибо за помощь, но есть ли возможность сделать это более гибко, не устанавливая время. Сначала следует запустить метод1(), а затем метод2, метод3 и так далее. - person basti12354; 22.03.2014

Вы можете выполнить AsyncTask:

public class BasicAsyncTask extends AsyncTask{

    @Override
    protected Object doInBackground(Object[] params) { // this will start when .execute() is called
        method1();
        return null;
    }

    @Override
    protected void onPostExecute(Object o) {   // this will be executed when doInbackGround finishes
        super.onPostExecute(o);
        method2();
    }
}

для запуска AsynkTask:

BasicAsyncTask basicAsyncTask = new BasicAsyncTask();
basicAsyncTask.execute();
person MikeOx    schedule 19.07.2016