2015-08-26 3 views
-1

У меня есть индикатор выполнения, который я изменяю от View.GONE до View.VISIBLE, перед тем, как позвонить классу writeFile().Android, индикатор выполнения не отображается перед запуском метода?

Что-то вроде этого:

onButtonPress(){ 
    mProgressBar.setVisibility(View.VISIBLE); 
    writeFile(); 
} 

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

Моя проблема заключается в том, что индикатор выполнения не отображается до тех пор, пока метод writeFile() не будет завершен, а затем коротко появится в течение секунды секунды, прежде чем пользователь будет перенаправлен в другое место.

Если я прокомментирую вызов метода, то ProgressBar появляется немедленно и вращается бесконечно, поэтому я знаю, что панель работает правильно.

Как я могу убедиться, что индикатор выполнения всплывает FIRST, а затем метод writeFile() вызывается после?

Заранее спасибо.

Дополнительно:

У меня нет большого опыта (точно нет!) С asynctasks, и поэтому я не уверен, если это маршрут я должен взять. Поведение, которое я ищу, - это индикатор выполнения, который появляется, когда пользователь нажимает кнопку, и остается на экране до тех пор, пока метод не будет завершен. Я не хочу, чтобы пользователь просматривал приложение в течение этого времени.

+0

ли метод запустить WriteFile в главном потоке? Если это ваша проблема, так как основной поток блокирует обновления пользовательского интерфейса. – Thorben

+0

Да, да. Итак, это вопрос асинхронный? – Birrel

+1

WriteFile блокирует пользовательский интерфейс основного потока, вы должны использовать другой поток. –

ответ

0

Вы можете попробовать следующий код, чтобы проверить, если Progressbar будет виден

new Thread(new Runnable() { 
    public void run() { 
     writeFile(); 
    } 
}).start(); 
+1

Пожалуйста, прямо не используйте Thread on android. –

+0

@cgomezmendez почему бы и нет? – Birrel

+1

@Birrel ответьте на этот вопрос http://stackoverflow.com/a/18480443/1987977 –

Смежные вопросы