【问题标题】:how to get image from RecyclerView item clicked in android如何从在android中单击的RecyclerView项目中获取图像
【发布时间】:2018-08-14 19:06:12
【问题描述】:

这是 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();
       }

    }
}

【问题讨论】:

  • 在你的适配器中创建一个接口,然后从你想要的任何地方调用它并从中获取 int [如果你不明白,我知道我会发布一些代码]

标签: android android-recyclerview


【解决方案1】:

您可以将 url 传递给 ProfileActivity 并在您的 ProfileActivity 中获取额外信息。

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

并在ProfileActivity onCreate() 中获取传递的资源ID

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

【讨论】:

    【解决方案2】:

    这是你的适配器

    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.
        }
    
    }
    

    希望对您有所帮助。干杯

    【讨论】:

      【解决方案3】:

      试试看: 我有适配器从 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();
      

      并用于其他类活动/片段

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

      它也会起作用

      【讨论】:

        猜你喜欢
        • 2019-11-23
        • 1970-01-01
        • 1970-01-01
        • 2021-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-01
        相关资源
        最近更新 更多