это мой сценарий: у меня есть экран входа, который открывает другое действие.В Упражнении у меня просто есть:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_details);
}
Макет довольно тяжелый, потому что он состоит из нескольких фрагментов, и для его загрузки требуется около 1,5 секунд.Теперь, как я могу отобразить ProgressDialog
, пока setContentView
заканчивает раздувать макет?Я попробовал с AsyncTask
, поместив setContentView
в doInBackground
, но, конечно, это невозможно, поскольку пользовательский интерфейс может быть обновлен только из потока пользовательского интерфейса.Поэтому мне нужно позвонить setContentView
в потоке пользовательского интерфейса, но где я должен показать / отклонить ProgressDialog
?
Я ценю вашу помощь.
Фра.
РЕДАКТИРОВАТЬ: Я следовал предыдущему предложению @ 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.