2016-03-28 2 views
0

Можно ли вызвать метод, который изменит ui после того, как представление будет возвращено в OnCreateView или OnCreate? Я хочу показать Progress View и скрыть список, пока что-то не закончит загрузку внутри задачи async из другого действия. Однако всякий раз, когда я открываю фрагмент с этим кодом:Вызов метода для изменения ui после onCreateView()?

boolean doneOnce = false; 
    do { 
     if(!doneOnce) { 
      showProg(true); 
      doneOnce = true; 
     } 
    }while (Values.courses == null); 

через меню навигации она замерзает, а затем всплывает, потому что это вызывается до того, как OnCreateView возвращается надутый вид. Любые решения?

+0

«Я хочу, чтобы показать View Progress и скрыть ListView, пока что-то не закончит загрузку внутри асинхронной задачи от другой деятельности», - то есть как в макете и переключать их соответствующую видимость (от 'GONE' до «ВИДИМО» или наоборот). «Однако всякий раз, когда я открываю фрагмент с помощью этого кода» - цикл занятости никогда не является правильным ответом для работы с графическим интерфейсом в Android и редко является правильным ответом в любом месте в разработке программного обеспечения. – CommonsWare

ответ

0

Такая петля блокирует пользовательский интерфейс. Как насчет использования Runnable, с вашей задачей, а затем ваши необходимые изменения видимости? Что-то вроде:

class MyRunnable implements Runnable { 
    @Override 
    public void run() { 
     //perform your task here 
     something.setVisibility(View.VISIBLE); 
    } 
} 

и после этого работоспособного через:

private android.os.Handler mHandler= new android.os.Handler(); 
mHandler.post(new MyRunnable()); 

EDIT: Может быть, вы все еще можете использовать работоспособный, но от вашей основной деятельности.

boolean doneOnce = false; 

class MyRunnable implements Runnable { 
    @Override 
    public void run() { 
     if(!doneOnce) { 
      showProg(true); 
      doneOnce = true; 
     } 
     if (Values.courses == null) { 
      mHandler.postdelayed(this, 100); //or mHandler.post(this); 
     } 
    } 
}  
+0

Благодарим вас за этот ответ, однако задача запускается в asynctask в другом действии, есть ли в любом случае, проверить, выполнено ли это за пределами этого действия? Задача устанавливает статическую переменную Values.courses как нечто, и поэтому я хочу, чтобы она показывала прогресс (Values.courses == null). Есть ли способ сделать это? – Engima

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