Как получить изображение из элемента RecyclerView, нажатого в Android

Это класс RecyclerView Holder чтобы получить изображение из элемента RecyclerView, щелкнув.

class RecyclerViewHolders extends RecyclerView.ViewHolder implements View.OnClickListener {
   ImageView gAvatar_photo;
   View layoutView;

    public RecyclerViewHolders(View layoutView) {
        super(layoutView);
        this.layoutView=layoutView;
        layoutView.setOnClickListener(this);
        gAvatar_photo=(ImageView) layoutView.findViewById(R.id.gAvatar_photo);
        gAvatar_photo.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
       if (v.getId()==R.id.gAvatar_photo) {
           Integer img = BoyAvatarAdapter.url[getAdapterPosition()];
           SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(v.getContext());
           SharedPreferences.Editor editor = sharedPreferences.edit();
           editor.putInt("imgRes", img);
           editor.apply();
           Intent intent = new Intent(v.getContext(), ProfileActivity.class);
           ProfileActivity pa = new ProfileActivity();
           pa.avatar(img);
           v.getContext().startActivity(intent);
           Toast.makeText(v.getContext(), "" + img, Toast.LENGTH_SHORT).show();
       }

    }
}

Отметьте это stackoverflow.com/questions/50127376/…

AskNilesh 14.08.2018 07:18

создайте интерфейс в своем адаптере и вызовите его, где хотите, и получите от него int [если вы не поняли, дайте мне знать, я опубликую некоторый код]

Harkal 14.08.2018 07:26
0
2
635
3

Ответы 3

Вы можете передать URL-адрес в ProfileActivity и получить его в свой ProfileActivity.

Intent intent = new Intent(v.getContext(), ProfileActivity.class);
intent.putExtra("image", BoyAvatarAdapter.url[getAdapterPosition()];); 
v.getContext().startActivity(intent);

И получить переданный идентификатор ресурса в ProfileActivity onCreate ()

int image = getIntent().getIntExtra("image", 0); // or use getStringExtra() if you have url instead of resource id.
if (image!=0){
 //  setImageHere.
}

Вот твой адаптер

abstract public class Adapter extends RecyclerView.Adapter<Adapter.RecyclerViewHolders>{

       abstract void onItemClicked(Your data to pass);

       class RecyclerViewHolders extends RecyclerView.ViewHolder implements View.OnClickListener {
               ImageView gAvatar_photo;
               View layoutView;

               public RecyclerViewHolders(View layoutView) {
                super(layoutView);
                ...
                @Override
                public void onClick(View v) {
                     if (v.getId()==R.id.gAvatar_photo)
                     // HERE IS THE MAGIC
                     onItemClicked(BoyAvatarAdapter.url[getAdapterPosition()])
                }
...
        }

И часть активности здесь, которая улавливает ваши события кликов

public class Dummy extends AppcompatActivity{

    ...
    RecyclerAdapter adapter = new RecyclerAdapter(){

    @Override
    public void onItemClicked(Your data){
        //Now got your data. You can do what do you want with it.
    }

}

Надеюсь, это поможет вам. Ваше здоровье

попробуй : У меня есть адаптер, который получает изображение из ImageVIew и отправляет ImageView в другой фрагмент, мне нужно другое действие, просто не используйте getArgument (); или вы можете выполнить поиск о передаче данных намерению

в вашем держателе onclick () добавьте этот код

        Drawable myDrawable = mImageView.getDrawable();
        BitmapDrawable bitmapDrawable = ((BitmapDrawable) myDrawable);
        mBitmap = bitmapDrawable.getBitmap();
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
        byte[] imageBytes = stream.toByteArray();
        mBundle.putByteArray("ResID", imageBytes);


        Fragment fragment = new Edit_Profile_Fragment();
        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.content_frame, fragment);
        fragmentTransaction.addToBackStack(null);
        fragment.setArguments(mBundle);
        fragmentTransaction.commit();

и использовать для другого класса acitivty / fragment

    byte[] byteArray = getArguments().getByteArray("ResID");
    Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
    mImage_profile.setImageBitmap(bmp);   

это тоже будет работать

Другие вопросы по теме