отображение диалога при загрузке макета с помощью setContentView в фоновом режиме - PullRequest
1 голос
/ 15 апреля 2010

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

dialog = ProgressDialog.show(this, "", "Loading. Please wait...", true);
runOnUiThread(new Runnable(){
  public void run() {
    setContentView(R.layout.main_layout);
    dialog.dismiss();
  }
});

Ответы [ 3 ]

6 голосов
/ 16 апреля 2010

Я получил решение, прочитав ссылку ниже и внедрив код, как показано ниже: http://developer.android.com/guide/appendix/faq/commontasks.html#threading

int glb=0,glbtotal=3;
final Handler mHandler = new Handler();

// Create runnable for posting
final Runnable mUpdateResults = new Runnable() {
    public void run() {
        updateResultsInUi();
    }
};

public void open_next_screen()
    {
            dialog = ProgressDialog.show(this, "", "Loading. Please wait...", true);
            startLongRunningOperation();
     }
private void updateResultsInUi() {

    // Back in the UI thread -- update our UI elements based on the data in mResults
    switch(glb)
    {
    case 0:
         setContentView(R.layout.main_layout);
            getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title);

        break;
    case 1:
    part2();

    break;
    case 2:
     part3();

    break;
    }

}

protected void startLongRunningOperation() {

    // 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() {


            for(glb=0;glb<glbtotal;glb++)
            {
                mHandler.post(mUpdateResults);

            switch(glb)
            {
            case 0:
                part1();
                break;

            }
            }
              dialog.dismiss();
        }
    };
    t.start();
}
1 голос
/ 15 апреля 2010

Пример загрузки в отдельном потоке на веб-сайте Android-разработчика . Чтобы увидеть реальный код, разверните представление в конце раздела «Диалоги хода выполнения».

Однако для вашей конкретной ситуации вам нужно переделать то, как вы делаете вещи. Что занимает так много времени, что вам нужен диалог прогресса для этого? Вы должны загрузить это во 2-й поток, отображая временную компоновку с помощью setContentView. Затем, когда поток завершит загрузку, либо снова вызовите setContentView, либо измените текст, изображения или все, что вы загрузили в поток.

Наконец: если вы действительно новичок в программировании на Android, я бы пока не пытался использовать отдельные потоки и усложнять загрузку. Это немного сложно, и сначала нужно многое понять.

0 голосов
/ 15 апреля 2010

Звучит так, будто вы хотите экран-заставку или что-то в этом роде, но настройка представления контента не должна выполняться в потоке. Отправьте файл layout.xml, который находится там, и его рендеринг занимает так много времени.

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