package com.demo; import java.io.File; import android.app.Activity; import android.content.Intent; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.ImageView; import com.demo.AsyncImageLoader.IImageLoadListener; public class TestFragment extends Fragment implements IImageLoadListener { private final static int TAKE_PICTURE = 1; private ImageView image; private Uri imageUri; private AsyncImageLoader asyncImageLoader; public TestFragment() { } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.asyncImageLoader = new AsyncImageLoader(); } // There is a known bug and this is the bug fix. // See: http://code.google.com/p/android/issues/detail?id=8488 @Override public void onPause() { super.onPause(); System.gc(); } @Override public void onDestroy() { super.onDestroy(); this.image = null; this.imageUri = null; this.asyncImageLoader = null; System.gc(); } @Override public void onSaveInstanceState(Bundle outState) { outState.putParcelable("image_uri", this.imageUri); super.onSaveInstanceState(outState); } public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.test_fragment, null); Button button = (Button) view.findViewById(R.id.camera_button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); File targetDir = new File(Environment .getExternalStorageDirectory(), Commons.APP_DIRECTORY); File photo = new File(targetDir, "demo.jpg"); imageUri = Uri.fromFile(photo); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo)); startActivityForResult(intent, TAKE_PICTURE); } }); this.image = (ImageView) view.findViewById(R.id.image); if (savedInstanceState != null) { this.imageUri = savedInstanceState.getParcelable("image_uri"); if (this.imageUri != null) { this.asyncImageLoader.loadDrawable(this.imageUri.toString(), this); } } return view; } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == TAKE_PICTURE && resultCode == Activity.RESULT_OK) { if (this.imageUri != null) { this.asyncImageLoader.loadDrawable(this.imageUri.toString(), this); } } } @Override public void imageLoaded(Drawable imageDrawable, String imageUrl) { this.image.setImageDrawable(imageDrawable); } }