1

I have started camera using startActivityForResult() from my PhotosFragment and decode the image and display on gridview on fragment using adapter. It captures image and onActvityResult called properly and all code on onActvityResult works fine(find through debug).But I need to display the camera taken image on gridview on fragment.After taking picture and save,it goes to Photofragment onActivityResult,and then go to home fragment directly(I have loaded HomeFragment and PhotosFragment on MainActivity).Not displayed It ocurs only on Samusng S4 device only.

I have tried configChanged parameter of Actvity in manifest.BUt not works for me.

Reference:

Android: Activity getting Destroyed after calling Camera Intent

https://stackoverflow.com/a/10411504

PhotosFragment.java

private void selectImage() {
        final CharSequence[] items = {"Take Photo", "Choose from Library",
                "Cancel"};

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle("Add Photo");
        builder.setItems(items, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int item) {
                if (items[item].equals("Take Photo")) {
                    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    File f = new File(android.os.Environment
                            .getExternalStorageDirectory(), "temp.jpg");
                    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
                    startActivityForResult(intent, REQUEST_CAMERA);
                } else if (items[item].equals("Choose from Library")) {
                    Intent intent = new Intent(
                            Intent.ACTION_PICK,
                            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                    intent.setType("image/*");
                    startActivityForResult(
                            Intent.createChooser(intent, "Select File"),
                            SELECT_FILE);
                } else if (items[item].equals("Cancel")) {
                    dialog.dismiss();
                }
            }
        });
        builder.show();
    }



    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        //super.onActivityResult(requestCode,resultCode,data);
        Log.i("CameraResult","requestCode->"+requestCode+"where REQUEST_CAMERA->"+REQUEST_CAMERA);
        Log.i("CameraResult","resultCode->"+resultCode+"where getActivity().RESULT_OK->"+getActivity().RESULT_OK);
        Log.i("CameraResult","data->"+data);

        if (resultCode == getActivity().RESULT_OK) {
            int thumbFactor = 6; // choose a power of 2

            if (requestCode == REQUEST_CAMERA) {
                File f = new File(Environment.getExternalStorageDirectory()
                        .toString());
                for (File temp : f.listFiles()) {
                    if (temp.getName().equals("temp.jpg")) {
                        f = temp;
                        break;
                    }
                }

                Log.i("CameraResult","f.getAbsolutePath()->"+f.getAbsolutePath());
                try {

                    imagePaths.add(f.getAbsolutePath());

                    //CarPicturesAdapter adapter = new CarPicturesAdapter(getActivity().getBaseContext(), R.id.pictureGrid, images);

                    CarPicturesAdapter adapter = new CarPicturesAdapter(getActivity().getBaseContext(), R.id.pictureGrid, imagePaths);
                    contentImage.setAdapter(adapter);

                    Log.i("CameraResult", "set adapter");

                    f.delete();

                    Log.i("CameraResult", "file deleted");
                } catch (Exception e) {
                    e.printStackTrace();
                }

                //super.onActivityResult(requestCode,resultCode,data);
            }
            /*else{
                super.onActivityResult(requestCode,resultCode,data);
            }*/
        }
    }

CarPicturesAdapter.java

public class CarPicturesAdapter extends ArrayAdapter<String>{

    private SparseBooleanArray mSelectedItemsIds;
    private final ArrayList<String> objects;
    private Context context;
    private String[] images;

    public CarPicturesAdapter(Context context, int textViewResourceId,
                           ArrayList<String> objects) {
        super(context, textViewResourceId, objects);
        this.context = context;
        this.images = new String[objects.size()];
        objects.toArray(this.images);
        this.objects = objects;
        mSelectedItemsIds = new SparseBooleanArray();

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        CheckableLayout checkableLayout = new CheckableLayout(context);
        View rowView = inflater.inflate(R.layout.picture_item_gridview, parent, false);

        SquareImageView imageView = (SquareImageView) rowView.findViewById(R.id.car_image);

        //imageView.setImageBitmap(Image.getBitmap(images[position]));

        ImageLoader.getInstance().displayImage(String.valueOf(Uri.fromFile(new File(images[position]))), imageView);

        checkableLayout.addView(rowView);
        return checkableLayout;
    }

    @Override
    public void remove(String image) {
        objects.remove(image);
        notifyDataSetChanged();
    }

    public void toggleSelection(int position) {
        selectView(position, !mSelectedItemsIds.get(position));
    }

    public void removeSelection() {
        mSelectedItemsIds = new SparseBooleanArray();
        notifyDataSetChanged();
    }

    public void selectView(int position, boolean value) {
        if (value)
            mSelectedItemsIds.put(position, value);
        else
            mSelectedItemsIds.delete(position);
        notifyDataSetChanged();
    }

    public int getSelectedCount() {
        return mSelectedItemsIds.size();
    }

    public SparseBooleanArray getSelectedIds() {
        return mSelectedItemsIds;
    }

    public class CheckableLayout extends FrameLayout implements Checkable {
        private boolean mChecked;

        public CheckableLayout(Context context) {
            super(context);
        }

        @SuppressWarnings("deprecation")
        public void setChecked(boolean checked) {
            mChecked = checked;
            setBackgroundDrawable(checked ? getResources().getDrawable(
                    android.R.color.holo_blue_dark) : null);
        }

        public boolean isChecked() {
            return mChecked;
        }

        public void toggle() {
            setChecked(!mChecked);
        }

    }
}
Community
  • 1
  • 1
Ramprasad
  • 7,981
  • 20
  • 74
  • 135

0 Answers0