onPause вызывается перед выходом из текущей активности - PullRequest
2 голосов
/ 09 ноября 2011

У меня есть следующее:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
               ....
               populate();
                handler = new Handler();
        t = new Timer();
        t.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                runOnUiThread(new Runnable() {
                    public void run() {
                        doReload1();
                        populate();
                    }
                });

            }

        }, 300, 30000);
}

private void populate() {
    if (playlists.length != 0) {
        MyListView = (ListView) findViewById(R.id.MyListView);
        for (String item : playlists) {
            Log.d("DEBUG", "item=" + item);
        }

        String[] adapterPlaylists = new String[playlists.length];
        for (int i = 0; i < playlists.length; i++) {
            adapterPlaylists[i] = playlists[i];
        }
        adapter1 = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, adapterPlaylists);

        MyListView.setAdapter(adapter1);
        adapter1.notifyDataSetChanged();

        MyListView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> arg0, View v,
                    int position, long id) {
                dialogwait = ProgressDialog.show(Playlist.this,
                        "Loading...", "Please wait..", true);
                Intent i = new Intent(getBaseContext(), ViewPlaylist.class);
                i.putExtra("id", idPlaylist[position]);
                i.putExtra("timer", timerPlaylist[position]);
                startActivity(i);

                finish();
            }
        });
    } else
        System.out.println("playlist null");

}

@Override
protected void onPause() {
    super.onPause();
    System.out.println("onPause Playlist!!!!!!");
    dialogwait.dismiss();
    t.cancel();
}

Дело в том, что здесь:

dialogwait = ProgressDialog.show(Playlist.this,
                            "Loading...", "Please wait..", true);

Я создаю ProgressDialog и распускаю его в onPause().Но onPause вызывается сразу после onCreate(), прежде чем я даже создаю ProgressDialog.Любая идея, почему? Любое решение? Спасибо

Ответы [ 3 ]

1 голос
/ 09 ноября 2011

Это потому, что Dialog в Android не блокируется - это означает, что поток, работающий за ним (в данном случае ваш Activity и, в частности, ваш onItemClickListener), продолжит выполняться.

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

0 голосов
/ 09 ноября 2011

все, что находится поверх вашей текущей активности (диалог или любая другая активность), делает его фоновой активностью, поэтому вызывается onPause. во всяком случае, dialog.dismiss () должен вызываться в действиях onResume. в вашей реализации, когда вы нажимаете кнопку, вы показываете диалоговое окно, тем самым приостанавливая свою деятельность и вызывая команду dismiss. Вы должны вызывать dismiss, только когда процесс, связанный с вашим диалогом, закончен, таким образом, сообщая своему пользователю, что вы готовы сделать что-то еще - в вашем случае запустите другое действие. Запустите свою деятельность в onDismiss вашего диалога. например:

AlertDialog alert = new AlertDialog.Builder(this).create();
  alert.setOnDismissListener(new OnDismissListener() {
    @Override
    public void onDismiss(DialogInterface dialog) {
      // start the other activity
    }
});
0 голосов
/ 09 ноября 2011

Я думаю, что проблема может быть в том, что вы звоните finish() в вашем OnItemClickListener. Это приведет к тому, что текущее действие завершится, как только вы нажмете на элемент, который из-за вашей реализации onPause() немедленно закроет диалоговое окно.

Может быть, вам нужно отобразить диалоговое окно, когда ваша ViewPlaylist деятельность создана, а не в этой деятельности.

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