【问题标题】:how to dismiss a progress dialog box when navigating from one activity to another using back and forth button?使用来回按钮从一个活动导航到另一个活动时如何关闭进度对话框?
【发布时间】:2012-01-04 08:17:42
【问题描述】:

我的 Android 应用中有 4 个活动。第一个导致第二个,第二个到第三个等等。每个活动都从网络中获取一些数据。这需要一些时间,所以我添加了一个进度对话框让用户知道它。现在的问题是,当我按下后退按钮时,进度对话框仍然存在。我应该在哪里编写dismiss() 函数来关闭该进度对话框?

PS:当我按两次返回按钮时它会消失。我应该在 onStart()、onResume() 还是在哪里写驳回???

代码如下:

private void onFileClick(Option option) {

    ProgressDialog progressDialog = new ProgressDialog(this);
    progressDialog.setProgress(10);
    progressDialog.setMax(100);
    progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    progressDialog.setMessage("Loading Data...");
    progressDialog.show();
    Intent i;
        i = new Intent(this, ChannelVideoListActivity.class);   
        startActivity(i);
    progressDialog.dismiss();
} 

【问题讨论】:

    标签: android dialog back


    【解决方案1】:

    尝试如下。

    onBackPressed(){
       progressDialog.dismiss();
    }
    

    【讨论】:

    • 默认情况下,如果进度条可见且未设置可取消(false);默认情况下,它会被关闭后退按钮。所以这不会有任何改变。
    【解决方案2】:

    //为此使用异步任务。 调用此行

    new SomeTask(0).execute();
    
    
    /** Inner class for implementing progress bar before fetching data **/
    
     private class SomeTask extends AsyncTask<Void, Void, Integer> 
        {
            private ProgressDialog Dialog = new ProgressDialog(yourActivityClass.this);
            @Override
            protected void onPreExecute()
            {
    
            Dialog.setMessage("downloading...");
            Dialog.show();
        }
    
        @Override
        protected Integer doInBackground(Void... params) 
        {
            //Task for doing something 
    
            return 0;
        }
    
        @Override
        protected void onPostExecute(Integer result)
            {
    
            if(result==0)
            {
    //do some thing
    Intent i = new Intent(this, ChannelVideoListActivity.class);   
            startActivity(i);
    
            }
    
    // after completed finished the progressbar
            Dialog.dismiss();
        }
    

    【讨论】:

    • 不是使用AsyncTask的问题。他只是对如何正确使用感到困惑(何时显示和关闭进度条)
    • @akkilis 他正在从网上获取一些数据,所以他实现进度对话框的方式不是好方法。
    【解决方案3】:

    我建议你用不同的方式写你的ChannelVideoListActivity

    您可能正在调用函数或编写代码以从网络加载数据,然后显示该数据或执行一些数据获取操作。

    onCreate() 中删除所有内容并将其放入AsyncTaskdoInBackGround() 函数中,并在AsyncTask 的onPreExecute 调用您的进度对话框和onPostExecute() 关闭对话框。

    在调用 setContentView() 方法后,从 ChannelVideoListActivity 的 onCreate() 调用此 AsyncTask 为 new TaskClass().execute()

    并且只需有意地从之前调用 ChannelVideoListActivity。

    【讨论】:

      【解决方案4】:

      在您调用和关闭进度条的流程中存在问题。

      应该是:

      • 应用已启动
      • 活动 2 已启动
      • 如果有网络调用,显示进度条
      • 想要关闭进度条并完成活动

      或者,作为代码:

      ProgressDialog dialog = new ProgressDialog(this);
          dialog.setOnKeyListener(new OnKeyListener() {
      
              public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
              if(keyCode == KeyEvent.KEYCODE_BACK)
              {
                  finish();
                  return true;
              }
                  return false;
              }
          });
      

      PS:在启动新活动之前不要启动进度条。启动 Activity,然后启动进度条。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-24
        • 2021-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多