Android: диалог загрузки для активности - PullRequest
0 голосов
/ 27 февраля 2011

Я пытаюсь реализовать код из , показывающий диалоговое окно при загрузке макета с помощью 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();
}

Это загружает данные, но диалог прогресса не отображается. Я попытался перетасовать вызов, чтобы создать отдельный поток и показать диалог, но не могу его отобразить. Похоже, что это довольно распространенный запрос, и этот пост, похоже, является единственным ответом на него.

РЕДАКТИРОВАТЬ: Для справки, сообщение в блоге, демонстрирующее, как я в итоге получил эту работу .

1 Ответ

1 голос
/ 27 февраля 2011

Поскольку то, что вы хотите, довольно просто, я бы порекомендовал вам использовать AsyncTask .Вы можете управлять отображением / скрытием диалога в onPreExecute () и onPostExecute ().Проверьте ссылку, там хороший пример.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...