簡體   English   中英

如何在mainactivity中獲取recyclerview圖像數據

[英]How to get recyclerview image data in mainactivity

我想做的是從圖庫和照相機中獲取圖像並將其放入recyclerview中。 現在主要部分是在圖像現在放置在recyclerview中之后出現的,但是只有我單擊上傳按鈕時,誰能告訴我如何將recyclerview中顯示的這些圖像恢復回mainActivity。

先感謝您。

我的主要活動。

package www.welkinfort.com.pphc;

import android.app.DatePickerDialog;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.media.ExifInterface;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.DatePicker;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

import butterknife.ButterKnife;

public class XenImageUploading extends AppCompatActivity implements AdapterView.OnItemSelectedListener, View.OnClickListener {
    ArrayAdapter<String> des_dataAdapter;
    ArrayList<String> discription_list = new ArrayList<>();
    //@BindView(R.id.selct_prject_spinner)
    Spinner select_pro_spn;
    TextView datetextTextView;
    Calendar myCalendar;
    static Bitmap rotatedBitmap;
    static Bitmap finalrotatedBitmap;
    DatePickerDialog.OnDateSetListener date;
    static final int REQUEST_TAKE_PHOTO = 1;
    private int SELECT_FILE = 2;
    private static String bitmap_overdraw_str;
    private static ImageButton cameraclick;
    private static ImageButton galleryclick;
    private static ImageButton videoclick;
    private static String mCurrentPhotoPath;
    private static RecyclerView recyclerView;
    ArrayList<Data_Model> arrayList;
    ImageView image_view;
    MyAdapter m;
    Bitmap finalbitmap;
    static String clickpath;
    int i = 0;
    String path ;
    private static final String TAG = "XenImageUploading";
    static File photoFile_1 = null;
    private String userChoosenTask;
    private Uri fileUri;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.xen_image_upload);
        ButterKnife.bind(this);
        setTitle("XEN IMAGE UPLOAD");
        recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
        cameraclick = (ImageButton) findViewById(R.id.camera_btn);
        galleryclick = (ImageButton) findViewById(R.id.gallery_btn);
        image_view = (ImageView) findViewById(R.id.image_view);
        arrayList = new ArrayList<>();
        Log.d("oncreate", "set adapter");

        bitmap_overdraw_str = "Lat:" + "aaaaaaaa" + "\nLong:" + "aaaaaaaa" + "\nDate:" + "aaaaaaaa";
        recyclerView.setLayoutManager(new GridLayoutManager(this, 3));
        ///////////////////////////////////////////////////////////////////
        //select_pro_spn = (Spinner) findViewById(R.id.selct_prject_spinner);
        //datetextTextView = (TextView) findViewById(R.id.selctdate__txtv);
        discription_list.add("Traffic light broken/not working");
        discription_list.add("Traffic light pole hit by vehicle");
        discription_list.add("No electricity connection");
        discription_list.add("Traffic light not visible/partially visible");
//        select_pro_spn.setOnItemSelectedListener(this);
        // Creating adapter for spinner
        des_dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, discription_list);
        // Drop down layout style - list view with radio button
        des_dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        // attaching data adapter to spinner
//        select_pro_spn.setAdapter(des_dataAdapter);
        myCalendar = Calendar.getInstance();
        date = new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear,
                                  int dayOfMonth) {
                // TODO Auto-generated method stub
                myCalendar.set(Calendar.YEAR, year);
                myCalendar.set(Calendar.MONTH, monthOfYear);
                myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                updateLabel();
            }
        };
//        datetextTextView.setOnClickListener(new View.OnClickListener() {
//
//            @Override
//            public void onClick(View v) {
//                // TODO Auto-generated method stub
//                new DatePickerDialog(XenImageUploading.this, date, myCalendar
//                        .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
//                        myCalendar.get(Calendar.DAY_OF_MONTH)).show();
//            }
//        });

        cameraclick.setOnClickListener(this);
        galleryclick.setOnClickListener(this);
        recyclerView.setOnClickListener(this);
    }

    private void updateLabel() {
        String myFormat = "MM-dd-yyyy"; //In which you need put here
        SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
        datetextTextView.setText(sdf.format(myCalendar.getTime()));
    }

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        switch (parent.getId()) {
//            case R.id.selct_prject_spinner:
//                String selected_intersection = parent.getSelectedItem().toString();
//                Log.e("Selected item ", selected_intersection);
//                //parent.notifyAll();
//                break;
        }
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.camera_btn:
                selectImage();
                break;
            case R.id.recycler_view:
               getImageall();
                break;
            case R.id.gallery_btn:
                Intent i = new Intent(
                        Intent.ACTION_PICK,
                        android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                i.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
                i.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(i, SELECT_FILE);
                break;
        }
    }

    private void getImageall() {

    }

    private void selectImage() {
        takepicture();
    }


    public void takepicture() {
        Log.d(TAG, "takepicture");

        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);


        if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
            try {
                photoFile_1 = createImageFile();
            } catch (IOException ex) {
                // Error occurred while creating the File
            }
            // Continue only if the File was successfully created
            if (photoFile_1 != null) {
                takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                        Uri.fromFile(photoFile_1));
                startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
            }
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (requestCode == REQUEST_TAKE_PHOTO && resultCode == RESULT_OK && null != data) {
            // Save Image To Gallery
            Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
            File f = new File(mCurrentPhotoPath);
            Uri contentUri = Uri.fromFile(f);
            mediaScanIntent.setData(contentUri);
            this.sendBroadcast(mediaScanIntent);
            ////////////////setting image to adapter on capturing///////////////////////////
            clickpath = mCurrentPhotoPath;
            Bitmap bitmap = BitmapUtility.decodeSampledBitmapFromResource(clickpath, 560, 300);
            setCameraDisplayOrientation(bitmap);
            try {
                FileOutputStream fos = new FileOutputStream(photoFile_1);
                finalrotatedBitmap.compress(Bitmap.CompressFormat.JPEG, 90, fos);
                fos.close();
            } catch (FileNotFoundException e) {
                Log.d(TAG, "File not found: " + e.getMessage());
            } catch (IOException e) {
                Log.d(TAG, "Error accessing file: " + e.getMessage());
            }
            Data_Model data_model = new Data_Model();
            data_model.setImage(finalrotatedBitmap);
            image_view.setImageBitmap(finalrotatedBitmap);
            arrayList.add(data_model);
            m = new MyAdapter(this, arrayList);
            recyclerView.setAdapter(m);
            m.notifyDataSetChanged();
        }
        if (requestCode == SELECT_FILE && resultCode == RESULT_OK && null != data) {
            InputStream stream = null;
            Uri uri = data.getData();
            //for (int i =0 ; i<numberOfImages ;i++){
                getImagePath(uri);
                Data_Model data_model = new Data_Model();
                data_model.setImage(finalbitmap);
                image_view.setImageBitmap(finalbitmap);
                arrayList.add(data_model);
                m = new MyAdapter(this, arrayList);
                recyclerView.setAdapter(m);
                m.notifyDataSetChanged();
           // }
        }
    }

    public String getImagePath(Uri uri) {
        Cursor cursor = getContentResolver().query(uri, null, null, null, null);
        cursor.moveToFirst();
        String document_id = cursor.getString(0);
        document_id = document_id.substring(document_id.lastIndexOf(":") + 1);
        cursor.close();

        cursor = getContentResolver().query(
                android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                null, MediaStore.Images.Media._ID + " = ? ", new String[]{document_id}, null);
        cursor.moveToFirst();
        path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
        cursor.close();

        finalbitmap = BitmapUtility.decodeSampledBitmapFromResource(path, 560, 300);
        //targetImage = (ImageView)findViewById(R.id.imageView1);
        image_view.setImageBitmap(finalbitmap);
        return path;
    }

    public static void setCameraDisplayOrientation(Bitmap fileresult) {
        Log.e(TAG, "setCameraDisplayOrientation");
        BitmapFactory.Options bounds = new BitmapFactory.Options();
        bounds.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(clickpath, bounds);
        BitmapFactory.Options opts = new BitmapFactory.Options();
        Bitmap bm = BitmapFactory.decodeFile(clickpath, opts);
        ExifInterface exif = null;
        try {
            exif = new ExifInterface(clickpath);
        } catch (IOException e) {
            e.printStackTrace();
        }
        String orientString = exif.getAttribute(ExifInterface.TAG_ORIENTATION);
        int orientation = orientString != null ? Integer.parseInt(orientString) : ExifInterface.ORIENTATION_NORMAL;

        int rotationAngle = 0;
        if (orientation == ExifInterface.ORIENTATION_ROTATE_90) rotationAngle = 90;
        if (orientation == ExifInterface.ORIENTATION_ROTATE_180) rotationAngle = 180;
        if (orientation == ExifInterface.ORIENTATION_ROTATE_270) rotationAngle = 270;

        Matrix matrix = new Matrix();
        matrix.setRotate(rotationAngle, (float) bm.getWidth() / 2, (float) bm.getHeight() / 2);
        rotatedBitmap = Bitmap.createBitmap(bm, 0, 0, bounds.outWidth, bounds.outHeight, matrix, true);
        finalrotatedBitmap = AddTextonBitmap.textAsBitmap(rotatedBitmap, bitmap_overdraw_str);
    }

    private File createImageFile() throws IOException {
        // Create an image file name
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        String imageFileName = "JPEG_" + timeStamp + "_";
        File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
        File image = File.createTempFile(
                imageFileName,  /* prefix */
                ".jpg",         /* suffix */
                storageDir      /* directory */
        );
        // Save a file: path for use with ACTION_VIEW intents
        mCurrentPhotoPath = image.getAbsolutePath();
        return image;
    }
}

適配器類包www.welkinfort.com.pphc;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import java.util.ArrayList;

/**
 * Created by Admin on 13-Jul-17.
 */

class MyAdapter extends RecyclerView.Adapter<MyAdapter.Myviewholder> {
    private static final String TAG = "Adapter";
    static Data_Model m;
    XenImageUploading xenImageUploading;
    ArrayList<Data_Model> arrayList;
    private Context mContext;

    public MyAdapter(XenImageUploading xenImageUploading, ArrayList<Data_Model> arrayList) {
        this.arrayList = arrayList;
        this.xenImageUploading = xenImageUploading;
    }

    @Override
    public Myviewholder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.abc, parent, false);
        Myviewholder myviewholder = new Myviewholder(view);
        Log.d("myactivty ", "oncreateViewHolder");

        return myviewholder;
    }

    @Override
    public void onBindViewHolder(final Myviewholder holder, final int position) {
        m = arrayList.get(position);
        Log.d(" myactivty", "onBindviewholder" + position);
        holder.imageView.setImageBitmap(m.getImage());

    }
    @Override
    public int getItemCount() {
        return arrayList == null ? 0 : arrayList.size();
    }

    public class Myviewholder extends RecyclerView.ViewHolder {
       // public  View view;
        public ImageView imageView;

        public Myviewholder(View itemView) {
            super(itemView);
            imageView = (ImageView) itemView.findViewById(R.id.image);

        }
    }
}

在此處輸入圖片說明

嘗試這樣在適配器中創建一個這樣的方法

  public ArrayList<Data_Model> getArray() {
    return arrayList;
}

現在在您的按鈕上單擊,只需調用此方法

 upload.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ArrayList<Data_Model> arrayList= adapter.getArray();
        }
    });

如有疑問請問我

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM