Я пытаюсь реализовать код из , показывающий диалоговое окно при загрузке макета с помощью setContentView в фоновом режиме и http://developer.android.com/guide/appendix/faq/commontasks.html#threading, чтобы показать диалоговое окно загрузки, когда загружается мое действие, но возникают трудности. 1005 *
У меня есть переменные класса, определенные для элементов пользовательского интерфейса в моем представлении, а также строки для данных, которые загружаются в другой поток из базы данных:
private TextView mLblName, mLblDescription, etc...
private String mData_RecipeName, mData_Description...
У меня также определены обработчики:
private ProgressDialog dialog;
final Handler mHandler = new Handler();
final Runnable mShowRecipe = new Runnable() {
public void run() {
//setContentView(R.layout.recipe_view);
setTitle(mData_RecipeName);
mLblName.setText(mData_RecipeName);
mLblDescription.setText(mData_Description);
...
}
};
В onCreate я тоже пытаюсь показать диалог, затем порождаю поток загрузки:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dialog = ProgressDialog.show(this, "", "Loading. Please wait...", true);
setContentView(R.layout.recipe_view);
showData();
}
protected void showData() {
// Fire off a thread to do some work that we shouldn't do directly in the UI thread
Thread t = new Thread() {
public void run() {
mDatabaseAdapter = new ChickenPingDatabase(ShowRecipe.this);
mDatabaseAdapter.open();
mTabHost = getTabHost();
mLblName = (TextView)findViewById(R.id.lblName);
mLblDescription = (TextView)findViewById(R.id.lblDescription);
...
Cursor c = mDatabaseAdapter.getRecipeById(mRecipeId);
if(c != null){
mData_RecipeName= c.getString(c.getColumnIndex(Recipes.NAME));
mData_Description= c.getString(c.getColumnIndex(Recipes.DESCRIPTION));
...
c.close();
}
String[] categories = mDatabaseAdapter.getRecipeCategories(mRecipeId);
mData_CategoriesDesc = Utils.implode(categories, ",");
mHandler.post(mShowRecipe);
}
};
t.start();
}
Это загружает данные, но диалог прогресса не отображается. Я попытался перетасовать вызов, чтобы создать отдельный поток и показать диалог, но не могу его отобразить. Похоже, что это довольно распространенный запрос, и этот пост, похоже, является единственным ответом на него.
РЕДАКТИРОВАТЬ: Для справки, сообщение в блоге, демонстрирующее, как я в итоге получил эту работу .