当我旋转屏幕时,progressDialog 停止更新
Posted
技术标签:
【中文标题】当我旋转屏幕时,progressDialog 停止更新【英文标题】:progressDialog stops to update when I rotate screen 【发布时间】:2013-08-29 15:14:59 【问题描述】:我遇到了一个让我发疯的小问题。我在保留的 Fragment 中使用 AsyncTask 来更新我的活动中的 progressDialog。我正在使用回调从我的片段发送进度。
问题是:当我旋转我的屏幕时,它只是停止更新重新创建的活动中的progressDialog。似乎 onProgressUpdate 停止在旋转的活动中被调用。
相关部分代码如下所示:
工人片段
public class WorkerFragment extends Fragment
Context mContext;
...
public static interface TaskCallbacks
void onPreExecute();
void onProgressUpdate(int... progress);
void onPostExecute();
@Override
public void onAttach(Activity activity)
super.onAttach(activity);
mCallbacks = (TaskCallbacks) activity;
@Override
public void onDetach()
super.onDetach();
mCallbacks = null;
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
// Retain this fragment across configuration changes.
setRetainInstance(true);
//inner class
class DownloadFileFromURL extends AsyncTask<String, Int, Void>
@Override
public void onPreExecute()
if (mCallbacks != null)
mCallbacks.onPreExecute();
@Override
public String doInBackground(String... f_url)
... //some verifications of files
if(!localFile.exists())
//http connection, check, buffer, inputstream, etc...
publishProgress((int)((bytesDownloaded*100)/remoteFileSize));
...
@Override
protected void onProgressUpdate(int... percent)
if (mCallbacks != null)
mCallbacks.onProgressUpdate(percent);
...
和活动
public class Updater extends Activity implements WorkerFragment.TaskCallbacks
private WorkerFragment myWorker;
private ProgressDialog pDialog;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_updater);
pDialog=null;
showDialog(1);
FragmentManager fm = getFragmentManager();
myWorker = (WorkerFragment) fm.findFragmentByTag("task");
if(myWorker == null)
myWorker = new WorkerFragment();
fm.beginTransaction().add(myWorker, "task").commit();
@Override
protected Dialog onCreateDialog(int id)
switch (id)
case 1:
pDialog = new ProgressDialog(this);
pDialog.setMessage("Baixando arquivos de mídia");
pDialog.setIndeterminate(false);
pDialog.setMax(100);
pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pDialog.setCancelable(false);
pDialog.show();
dialogType=progress_bar_type;
return pDialog;
@Override
public void onProgressUpdate(int... progress)
//setting progress percentage
if(pDialog!=null)
pDialog.setProgress(progress[0]);
@Override
public void onPostExecute()
if(pDialog!=null)
dismissDialog(1);
...
【问题讨论】:
我想你必须使用DialogFragment
来解决你的问题,因为当你改变方向时,你的活动会重新加载。
我认为您应该阅读***.com/a/3821998/1024955 来解决您的问题。或另一篇文章androiddesignpatterns.com/2013/04/…
【参考方案1】:
尝试将此代码放在清单中,您已在其中指明了您的活动
android:configChanges="orientation|screenSize"
【讨论】:
以上是关于当我旋转屏幕时,progressDialog 停止更新的主要内容,如果未能解决你的问题,请参考以下文章
Android 屏幕旋转 处理 AsyncTask 和 ProgressDialog 的最佳方案
Android 屏幕旋转 处理 AsyncTask 和 ProgressDialog 的最佳方案