Подождите после setVisibility (), пока виджет не станет действительно видимым в приложении - PullRequest
0 голосов
/ 29 июня 2011

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

Настройка видимости индикатора выполнения останавливается (зависает?) До тех пор, пока не завершатся запросы oauth.Как я могу это исправить ?!Я думаю, что работать с sleep() с, wait() с или таймерами было бы плохим решением здесь ...

private void registerOnce(){

    ProgressBar spinner = (ProgressBar) findViewById(R.id.progressBar);
    Button login = (Button) findViewById(R.id.buttonLogin);

    spinner.setVisibility(View.VISIBLE);
    login.setVisibility(View.INVISIBLE);

    // Here goes the code for some oauth requests
    // This code here seems to prevent setting the
    // the visibility where I want it to.

    spinner.setVisibility(View.INVISIBLE);
    login.setVisibility(View.VISIBLE);

}

Ответы [ 2 ]

2 голосов
/ 29 июня 2011

Лучше использовать AsyncTask
в onPreExecute()

 spinner.setVisibility(View.VISIBLE);
    login.setVisibility(View.INVISIBLE);

в doInBackground

// Here goes the code for some oauth requests
    // This code here seems to prevent setting the
    // the visibility where I want it to.

И в onPostExecute

spinner.setVisibility(View.INVISIBLE);
    login.setVisibility(View.VISIBLE);
0 голосов
/ 29 июня 2011

отделить ваш пользовательский интерфейс от тяжелых фоновых процессов. ваши OATH-запросы находятся в одном потоке с вашим пользовательским интерфейсом. Лучше запусти тяжелые речи (здесь клятва связи) в другой ветке. или попробуйте использовать AsyncTask

...