2014-11-06 2 views
1

Моей проблемы: Когда я отладка коды, как например .:Ожидания пользовательского интерфейса Работы в конце (Android)

someSpinner.setSelection (0); someEditText.setEnabled (true);

тогда я вижу, что первое действие фактически выполняется ПОСЛЕ второго. Я предполагаю, что действие spinner помещается в какое-то асинхронное задание, которое не начинается сразу. Моя цель - дождаться завершения первого действия, а затем запустить второе. Кто-нибудь знает, как это реализовать?

В Eclipse RCP я решала это похоже на следующее:

uiJob1.addJobChangeListener(new JobChangeAdapter() { 
    @Override 
    public void done(IJobChangeEvent event) { 
     if (event.getResult().isOK()) { 
     uiJob2.schedule(); 
     } else { 
      ... 
     } 
    } 
    }); 

    // 2 
    uiJob2.addJobChangeListener(new JobChangeAdapter() { 
    @Override 
    public void done(IJobChangeEvent event) { 
     if (event.getResult().isOK()) { 
     ... 
     } else { 
     ... 
     } 
    } 
    }); 

    uiJob1.schedule(); 
+0

Вы думаете об этом не так. Но не могу сказать, что правильно, потому что вы не сказали ** почему ** и **, что вы пытаетесь сделать. Чтобы как-то дождаться завершения обновления пользовательского интерфейса, хотя это определенно недостаток дизайна в многопоточной среде asycnh OOP. – Simon

ответ

0

На самом деле, это является общим для Android: у вас нет гарантии, что все действия будут происходить в синхронном режиме - иначе порядок вы выполнили их в свой код - когда они управляются событиями.

Я думаю, вы должны попробовать, чтобы добавить OnItemSelectedListener() слушателя на вашей блесну и посмотреть, если это событие также прищемить действие: someSpinner.setSelection(0);

spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 
    @Override 
    public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) { 
     // your code here 
    } 

    @Override 
    public void onNothingSelected(AdapterView<?> parentView) { 
     // your code here 
    } 

}); 

Позволь мне знать, если это может работать.

Спасибо, Пол

0

Спасибо за быстрый ответ, Пол.

У меня уже есть OnItemSelectedListener на счетчике. Внутри этого слушателя, в одном случае, я выполняю someEditText.setEnabled (false). И поскольку команды не выполняются в синхронном режиме, второе действие моего первого сообщения (someEditText.setEnabled (true);) не имеет никакого эффекта: -/

Я узнал, что, вызвав someSpinner.setSelection (0, false); он выполняется до некоторогоEditText.setEnabled (true); но я не хочу полагаться на это «решение» ...

+0

Можете ли вы выслать мне какой-нибудь код? Я действительно заинтересован в этом случае и хотел бы попытаться использовать getViewTreeObserver(). – Paul

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