首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从安卓中点击的RecyclerView项目中获取图片

如何从安卓中点击的RecyclerView项目中获取图片
EN

Stack Overflow用户
提问于 2018-08-14 13:16:34
回答 3查看 744关注 0票数 0

这是从点击的RecyclerView项目中获取图像的RecyclerView保持器类。

代码语言:javascript
复制
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();
       }

    }
}
EN

回答 3

Stack Overflow用户

发布于 2018-08-14 13:31:53

您可以将url传递给ProfileActivity,并在您的ProfileActivity中获得额外的url。

代码语言:javascript
复制
Intent intent = new Intent(v.getContext(), ProfileActivity.class);
intent.putExtra("image", BoyAvatarAdapter.url[getAdapterPosition()];); 
v.getContext().startActivity(intent);

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

代码语言:javascript
复制
int image = getIntent().getIntExtra("image", 0); // or use getStringExtra() if you have url instead of resource id.
if(image!=0){
 //  setImageHere.
}
票数 0
EN

Stack Overflow用户

发布于 2018-08-14 18:48:08

这是您的适配器

代码语言:javascript
复制
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()])
                }
...
        }

这里的活动部分捕获您的单击事件

代码语言:javascript
复制
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.
    }

}

希望能对你有所帮助。干杯

票数 0
EN

Stack Overflow用户

发布于 2018-08-14 19:06:12

尝试一下:我让适配器从ImageVIew获取图像,并将ImageView发送到您需要的其他片段,但不要使用getArgument();或者您可以搜索有关将数据传递给intent的信息

在您的控制器onclick()中添加以下代码

代码语言:javascript
复制
        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();

并用于其他类的活动/片段

代码语言:javascript
复制
    byte[] byteArray = getArguments().getByteArray("ResID");
    Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
    mImage_profile.setImageBitmap(bmp);   

它也会正常工作

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51834147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档