Это мой сценарий: у меня есть экран входа в систему, который открывает другое действие. В Activity у меня просто:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_details);
}
Макет довольно тяжелый , потому что он состоит из нескольких фрагментов и загружается примерно за 1,5 секунды.
Теперь, как я могу отобразить ProgressDialog
, пока setContentView
завершает заполнение макета? Я пробовал использовать AsyncTask
, поместив setContentView
в doInBackground
, но, конечно, это невозможно, так как пользовательский интерфейс можно обновить из потока пользовательского интерфейса. только.
Поэтому мне нужно вызвать setContentView
в потоке пользовательского интерфейса, но где мне показать / закрыть ProgressDialog
?
Я ценю вашу помощь.
Fra.
] РЕДАКТИРОВАТЬ: Я последовал предыдущему предложению @ JohnBoker, это код, который у меня есть сейчас:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_empty_layout);
new ContentSetterTask().execute("");
}
private class ContentSetterTask extends AsyncTask<String, Void, Void> {
public ProgressDialog prgDlg;
@Override
protected void onPreExecute() {
android.os.Debug.waitForDebugger();
prgDlg = ProgressDialog.show(MultiPaneActivity.this, "", "Loading...", true);
}
@Override
protected Void doInBackground(String... args) {
android.os.Debug.waitForDebugger();
ViewGroup rootView = (ViewGroup)findViewById(R.id.emptyLayout);
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View inflated = inflater.inflate(R.layout.activity_details, rootView);
return null;
}
@Override
protected void onPostExecute(Void arg) {
android.os.Debug.waitForDebugger();
if (prgDlg.isShowing())
prgDlg.dismiss();
}
}
}
Строка
View inflated = inflater.inflate(R.layout.activity_details, rootView);
дает мне ошибку:
06-27 16:47:24.010:
ERROR/AndroidRuntime(8830): Caused by:android.view.ViewRoot$CalledFromWrongThreadException:
Only the original thread that created a view hierarchy can touch its views.