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