public class RotateScreenActivity extends AppCompatActivity { private RestoreDataFragment restoreDataFragment; private Bitmap mBitmap; private DialogFragment dialogFragment; private ImageView fragmentSaveDataIV; private MyAsyncTask myAsyncTask; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_rotate_screen); FragmentManager fm = getFragmentManager(); restoreDataFragment = (RestoreDataFragment) fm.findFragmentByTag("data"); if(restoreDataFragment == null){ restoreDataFragment = new RestoreDataFragment(); FragmentTransaction transaction = fm.beginTransaction(); transaction.add(restoreDataFragment,"data"); transaction.commit(); } fragmentSaveDataIV = (ImageView)findViewById(R.id.fragmentSaveDataIV); // mBitmap = restoreDataFragment.getData(); // if(mBitmap == null){ // dialogFragment = new DialogFragment(); // dialogFragment.show(fm,"dialog"); // RequestQueue requestQueue = Volley.newRequestQueue(this); // ImageRequest imageRequest = new ImageRequest("http://p2.so.qhmsg.com/t01fe53a734803b5887.jpg", new Response.Listener<Bitmap>() { // @Override // public void onResponse(Bitmap response) { // fragmentSaveDataIV.setImageBitmap(response); // restoreDataFragment.setData(response); // dialogFragment.dismiss(); // } // },0, 0, ImageView.ScaleType.CENTER_CROP, Bitmap.Config.ARGB_8888, new Response.ErrorListener() { // @Override // public void onErrorResponse(VolleyError error) { // dialogFragment.dismiss(); // } // }); // requestQueue.add(imageRequest); // }else{ // fragmentSaveDataIV.setImageBitmap(mBitmap); // } myAsyncTask = restoreDataFragment.getMyAsyncTask(); if(myAsyncTask == null){ myAsyncTask = new MyAsyncTask(this); myAsyncTask.execute("http://p2.so.qhmsg.com/t01fe53a734803b5887.jpg"); restoreDataFragment.setMyAsyncTask(myAsyncTask); }else{ myAsyncTask.setActivity(this); } } @Override public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) { myAsyncTask.setActivity(null); super.onSaveInstanceState(outState, outPersistentState); } public void noyifyImage(){ if(myAsyncTask != null){ fragmentSaveDataIV.setImageBitmap(myAsyncTask.getmBitmap()); } }
}
public class RestoreDataFragment extends Fragment { // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER private static final String ARG_PARAM1 = "param1"; private static final String ARG_PARAM2 = "param2"; // TODO: Rename and change types of parameters private String mParam1; private String mParam2; private Bitmap data; //保存一个Bitmap private MyAsyncTask myAsyncTask; //保存一个异步任务 // private OnFragmentInteractionListener mListener; public RestoreDataFragment() { // Required empty public constructor } public Bitmap getData() { return data; } public void setData(Bitmap data) { this.data = data; } public MyAsyncTask getMyAsyncTask(){ return myAsyncTask; } public void setMyAsyncTask(MyAsyncTask myAsyncTask){ this.myAsyncTask = myAsyncTask; } /** * Use this factory method to create a new instance of * this fragment using the provided parameters. * * @param param1 Parameter 1. * @param param2 Parameter 2. * @return A new instance of fragment RestoreDataFragment. */ // TODO: Rename and change types and number of parameters public static RestoreDataFragment newInstance(String param1, String param2) { RestoreDataFragment fragment = new RestoreDataFragment(); Bundle args = new Bundle(); args.putString(ARG_PARAM1, param1); args.putString(ARG_PARAM2, param2); fragment.setArguments(args); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { mParam1 = getArguments().getString(ARG_PARAM1); mParam2 = getArguments().getString(ARG_PARAM2); } setRetainInstance(true); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_restore_data, container, false); } // TODO: Rename method, update argument and hook method into UI event public void onButtonPressed(Uri uri) { // if (mListener != null) { // mListener.onFragmentInteraction(uri); // } } @Override public void onAttach(Context context) { super.onAttach(context); // if (context instanceof OnFragmentInteractionListener) { // mListener = (OnFragmentInteractionListener) context; // } else { // throw new RuntimeException(context.toString() // + " must implement OnFragmentInteractionListener"); // } } @Override public void onDetach() { super.onDetach(); // mListener = null; } /** * This interface must be implemented by activities that contain this * fragment to allow an interaction in this fragment to be communicated * to the activity and potentially other fragments contained in that * activity. * <p> * See the Android Training lesson <a href= * "http://developer.android.com/training/basics/fragments/communicating.html" * >Communicating with Other Fragments</a> for more information. */ public interface OnFragmentInteractionListener { // TODO: Update argument type and name void onFragmentInteraction(Uri uri); } }
public class MyAsyncTask extends AsyncTask<String,Integer,Bitmap> { private RotateScreenActivity activity; private DialogFragment dialogFragment; private Bitmap mBitmap; private boolean isComplete = false; public MyAsyncTask(RotateScreenActivity activity){ this.activity = activity; } @Override protected void onPreExecute() { dialogFragment = new DialogFragment(); dialogFragment.show(activity.getFragmentManager(),"MyAsyncTask"); } public Bitmap getmBitmap() { return mBitmap; } @Override protected Bitmap doInBackground(String... strings) { String imageUrl = strings[0]; HttpURLConnection httpURLConnection = null; try { Thread.sleep(10000); URL url = new URL(imageUrl); httpURLConnection = (HttpURLConnection) url.openConnection(); httpURLConnection.setReadTimeout(10000); httpURLConnection.setConnectTimeout(5000); mBitmap = BitmapFactory.decodeStream(httpURLConnection.getInputStream()); }catch (Exception e){ e.printStackTrace(); }finally { if(httpURLConnection != null){ httpURLConnection.disconnect(); } } return mBitmap; } @Override protected void onPostExecute(Bitmap bitmap) { isComplete = true; if(activity != null){ activity.noyifyImage(); } if(dialogFragment != null){ dialogFragment.dismiss(); } } public void setActivity(RotateScreenActivity activity) { //销毁上一个activity的加载框 if(this.activity == null && dialogFragment != null){ dialogFragment.dismiss(); } //当前activity被销毁,需要同时销毁加载框 if(activity == null && dialogFragment != null){ dialogFragment.dismiss(); } this.activity = activity; if(activity != null){ if(isComplete){ activity.noyifyImage(); }else{ dialogFragment = new DialogFragment(); dialogFragment.show(activity.getFragmentManager(),"MyAsyncTask"); } } } }
转载请表明出处:http://blog.csdn.net/lmj623565791/article/details/37936275