2

我遇到了一个让我发疯的小问题。我在保留的 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);
                 ...
            }
        }
4

1 回答 1

-2

尝试将此代码放在清单中,您已在其中表明您的活动

android:configChanges="orientation|screenSize"

于 2015-05-06T16:57:48.537 回答