从活动外部关闭“进度”对话框

时间:2014-09-22 18:49:34

标签: android background-process progressdialog

我试图在异常发生后关闭进度对话框,但我当前的情况不允许我这样做。

我有3个班级:

  1. MainActivity
  2. 二等
  3. 三级栏目
  4. 来自 MainActivity 我正在使用AsyncTask运行任务并显示进度对话框,而任务则在后台完成。

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
    
     // my code ...
    
     BackgroundTask bt = new BackgroundTask();
     bt.execute();
    
    }
    private class BackgroundTask extends AsyncTask<Void, Void, Void> 
    {
       private ProgressDialog PD;
    
       @Override
       protected void onPreExecute() 
       {
          PD =  new ProgressDialog(getActivity());
          PD.setMessage("Performing background tasks...");
          PD.setCancelable(false);
          PD.show();
       }
    
       @Override
       protected Void doInBackground(Void... arg0) 
       {
          // call SecondClass's getMyPhotos method to perform some tasks
          // ...
    
          return null;
       }
    
       protected void onPostExecute(Void... arg0)
       {
          Log.i("MainActivity", "--called--");
       }
    }
    

    我的 SecondClass 是带有一些方法的简单Java类

    public class SecondClass
    {
       // ....
       public void getMyPhotos()
       {
          // from here I call ThirdClass's internetRelatedStuff method
       }
    }
    

    最后在 ThirdClass 我在AsyncTask中做一些与互联网相关的事情:

    public class ThirdClass
    {
       // ....
       public void internetRelatedStuff()
       {
          try
          {
             // again some other stuff...
    
             // LoadImage asyncTask        
             LoadImage loadImg = new LoadImage();
             loadImg.execute();
          }
          catch(Exception e)
          {
              if(e.getErrorCode() == 34)
              {
                 // if I get an exception here, how am I suppose to close close Progress dialog
                 // of MainActivity
              }
          }
       }    
    
    private class LoadImage extends AsyncTask<.......> 
    {
     // .....
    }   
    
    }
    

    所以在我的ThirdClass的try / catch中,如果发生异常,我可以关闭从MainActivity显示的Progress对话框吗?

2 个答案:

答案 0 :(得分:0)

是的,有多种方法可以做到这一点。您可以将ProgressDialog中的MainActivity对象传递到SecondClass的{​​{1}}方法,然后传递给getMyPhotos()构造函数,然后关闭对话框

答案 1 :(得分:0)

有几种方法可以做到这一点,让我指出两个....

  1. 您可以将对话框从活动传递到SecondClass,然后从SecondClass传递到第三类,并在那里使用它来关闭对话框...您将在第二和第三类中定义ProgressDialog,

    < / LI>
  2. 在Activity中创建一个静态变量ProgressDialog和一个静态函数closeDialogs() 你可以在哪里关闭对话框,你可以使用静态引用来调用它。来自三等, 我个人喜欢这个....