AsyncTask 的进度对话框 - Android
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/25998065/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Progress Dialog for AsyncTask - Android
提问by user3156801
I'm trying to show a progress dialog while the twitter feed is loading up...However the progress dialog remains on screen when the twitter feed appears. Any help is much appreciated.
我正在尝试在 twitter 提要加载时显示进度对话框……但是,当 twitter 提要出现时,进度对话框仍保留在屏幕上。任何帮助深表感谢。
public class MainActivity extends ListActivity {
final static String twitterScreenName = "CFABUK";
final static String TAG = "MainActivity";
private AsyncTask<Object, Void, ArrayList<TwitterTweet>> tat;
boolean done;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
done=false;
AndroidNetworkUtility androidNetworkUtility = new AndroidNetworkUtility();
if (androidNetworkUtility.isConnected(this)) {
TwitterAsyncTask syn=new TwitterAsyncTask();
syn.execute(twitterScreenName,this);
ProgressDialog pd = new ProgressDialog(MainActivity.this);
pd.setMessage("loading");
pd.show();
do {
if(!(syn.getStatus()==AsyncTask.Status.RUNNING)) {
pd.dismiss();
pd.cancel();
done=true;
}
} while(done=false);
} else {
Log.v(TAG, "Network not Available!");
}
}
}
回答by Slampy
You must call ProgressDialog show() method on AsyncTasks onPreExecute(). For example:
您必须在 AsyncTasks onPreExecute() 上调用 ProgressDialog show() 方法。例如:
class MyTask extends AsyncTask<Void, Void, Void> {
ProgressDialog pd;
@Override
protected void onPreExecute() {
super.onPreExecute();
pd = new ProgressDialog(MainActivity.this);
pd.setMessage("loading");
pd.show();
}
@Override
protected Void doInBackground(Void... params) {
// Do your request
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
if (pd != null)
{
pd.dismiss();
}
}
}
回答by Yeray
You must use a onPreExecute and onPostExecute of AsyncTask class. For example:
您必须使用 AsyncTask 类的 onPreExecute 和 onPostExecute。例如:
class AsyncData extends AsyncTask<Void, Void, Void>{
@Override
protected void onPreExecute() {
super.onPreExecute();
// init progressdialog
}
@Override
protected Void doInBackground(Void... arg0) {
// get data
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
// dismiss dialog
}
}
回答by My God
The methods onPreExecute()
, doInBackground()
and onPostExecute()
of AsyncTask are used for purpose that you mentioned -
的方法onPreExecute()
,doInBackground()
和onPostExecute()
的AsyncTask的用于目的你提到的-
public class MainActivity extends ListActivity {
final static String twitterScreenName = "CFABUK";
final static String TAG = "MainActivity";
private AsyncTask<Object, Void, ArrayList<TwitterTweet>> tat;
boolean done;
Context context;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
done=false;
context = this;
new NetworkTask().execute();
}
}
class NetworkTask extends AsyncTask<String, String, String>
{
Context ctx = context ;
@Override
protected void onPreExecute()
{
super.onPreExecute();
pDialog = new ProgressDialog(getActivity());
pDialog.setMessage("Working ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected String doInBackground(String... args)
{
//Do your background work here and pass the value to onPostExecute
AndroidNetworkUtility androidNetworkUtility = new AndroidNetworkUtility();
if (androidNetworkUtility.isConnected(ctx)) {
TwitterAsyncTask syn=new TwitterAsyncTask();
syn.execute(twitterScreenName,this);
while(done)
{
if(!(syn.getStatus()==AsyncTask.Status.RUNNING))
{
done=true;
}
else
{
Log.v(TAG, "Network not Available!");
}
}
return done + "";
}
protected void onPostExecute(String result)
{
//Do something with result and close the progress dialog
pDialog.dismiss();
}
回答by Junaid Ali
ProgressBar is best alternative for ProgressDialog. A user interface element that indicates the progress of an operation. ProgressDialog is deprecated in latest versions.
ProgressBar 是 ProgressDialog 的最佳选择。指示操作进度的用户界面元素。ProgressDialog 在最新版本中已弃用。
For more info see android developer official site: https://developer.android.com/reference/android/widget/ProgressBar.html
有关更多信息,请参阅 android 开发者官方网站:https: //developer.android.com/reference/android/widget/ProgressBar.html