2016-08-18 32 views
1

我正在尝试隐藏/显示ProgressBar根据AsyncTask状态, 我有两个类,一个扩展FragmentActivity和第二个AsyncTask。使用AsyncTask隐藏/显示ProgressBar

MainActivity.java

public class MainActivity extends FragmentActivity { 

public static ProgressBar mProgressBar; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    mProgressBar = (ProgressBar) findViewById(R.id.progress_bar); 
} 

@Override 
protected void onStart() { 
    super.onStart(); 
    // What will happen to the progress bar here? 
} 

@Override 
protected void onStop() { 
    super.onStop(); 
    // What will happen to the progress bar here? 
} 

     @Override 
     protected void onResume() { 
     super.onResume(); 

     // What will happen to the progress bar here? 
    } 
    } 

MyAsyncTask.java

public class MyAsyncTask extends AsyncTask<Void,Void, Void> { 

@Override 
protected Void doInBackground() { 
    // start download some images from cloud 
    // Here the progress bar should start to appear in MainActivity 
    // mProgressBar.setVisibility(View.VISIBLE); 

} 

@Override 
protected void onPostExecute(Void result) { 
    Log.d(TAG, "Finished book downloading images the cloud"); 
    // Here the progress bar should start to disappear in MainActivity 
    // mProgressBar.setVisibility(View.GONE); 


} 

} 

main_activity.xml

 <ProgressBar 
    android:id="@+id/progress_bar" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:indeterminate="true" /> 

希望你能理解我,谢谢大家谁可以提供帮助。

+0

http://stackoverflow.com/questions/3028306/download-a-file-with-android-and-showing-the-progress-in-a-progressdialog?rq=1这可以解决你的问题。 – Android

回答

0
public class MyAsyncTask extends AsyncTask<Void,Void, Void> { 
@Override 
protected void onPreExecute(Void result) { 
    Log.d(TAG, "Finished book downloading images the cloud"); 
    // Here the progress bar should start to disappear in MainActivity 
    mProgressBar.setVisibility(View.VISIBLE); 


} 
@Override 
protected Void doInBackground() { 
// start download some images from cloud 
// there is a time cost operation 


} 

@Override 
protected void onPostExecute(Void result) { 
    Log.d(TAG, "Finished book downloading images the cloud"); 
    // Here the progress bar should start to disappear in MainActivity 
    // mProgressBar.setVisibility(View.GONE); 


} 

} 

您应该使用onPreExecute()方法来显示对话框。

这里是MainActivity

@Override 
protected void onResume() { 
    super.onResume(); 
    new MyAsyncTask().execute(); 
} 

,我认为你应该阅读APIs第一。

+0

好的,但我该怎么办? –

1

进度条应出现在onPreExecute()方法(仍在UI线程中)。然后,当你回到onPostExecute方法的UI线程时,你就会放弃它。

0

在UI线程上运行时使用preExecute和postExecute方法。在Asyntask类

public class MyAsyncTask extends AsyncTask<Void,Void, Void> { 

ProgressBar pBar; 
@Override 
protected void onPreExecute(Void result) { 
pBar=new ProgressBar(getContext()); 
pBar.show(); 
} 

@Override 
protected void onPostExecute(Void result) { 
    if(pBar !=null and pBar.isShowing()){ 
    pBar.dismiss(); 
} 
} 

} 
+0

这是两个不同的类,我不明白它是如何工作的? –

+0

在你的'MyAsyncTask'中创建构造函数,并在你的构造函数中传递'context'作为参数,然后使用该上下文来构建'progressBar',然后它就可以工作。 –

0

使用接口与Activity类

public class MyAsyncTask extends AsyncTask<Void,Void,Void> { 

//use context for activity reference 
private Context context_; 

public MyAsyncTask(Context context) { 
    this.context_=context; 
} 

@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 
} 

@Override 
protected Void doInBackground(Void... voids) { 
    return null; 
} 

@Override 
protected void onPostExecute(Void aVoid) { 
    super.onPostExecute(aVoid); 
    if(mCallBack!=null){ 
     mCallBack.onSuccess("Success"); 
    }else { 
     mCallBack.onError("Error"); 

    } 
} 

MyAsyncCallBack mCallBack=null; 

public MyAsyncCallBack getmCallBack() { 
    return mCallBack; 
} 

public void setmCallBack(MyAsyncCallBack mCallBack) { 
    this.mCallBack = mCallBack; 
} 

public interface MyAsyncCallBack{ 
    public void onSuccess(String successMessage); 
    public void onError(String successMessage); 
} 

}

呼叫AsynckTask类从活动交流class.Before调用asyntask开始取得进展。并通过界面完成asyntask返回活动的工作并隐藏进度。

startProgress(); 
    MyAsyncTask mTask=new MyAsyncTask(YourActivity.this); 
    mTask.setmCallBack(new MyAsyncTask.MyAsyncCallBack() { 
     @Override 
     public void onSuccess(String successMessage) { 
      //do success work and hide progress 
      hideProgress(); 
     } 

     @Override 
     public void onError(String successMessage) { 
      //do error work and hide progress 
      hideProgress(); 
     } 
    }); 
    mTask.execute();