【问题标题】:Change Imageview's image outside recyclerview on a clickevent of recyclerview item在 recyclerview 项目的 clickevent 上更改 Imageview 在 recyclerview 之外的图像
【发布时间】:2018-12-28 17:30:27
【问题描述】:

我想在点击 recyclerview 项目时更新 Imageview 的图像。下面我发布了我的布局截图:

小图像在回收站视图中,绿色大图在回收站视图之外。

//my recycler view adapter code

Context mContext;
List<imgModel> mImgModelList;
String imgUrl;

public imageListAdapter(Context context, List<imgModel> imgModelList) {
    mContext = context;
    mImgModelList = imgModelList;
}

@NonNull
@Override
public imgListHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

    LayoutInflater inflater = LayoutInflater.from(mContext);
    View view = inflater.inflate(R.layout.img_card,viewGroup,false);
    imgListHolder imgListHolder = new imgListHolder(view);

    return imgListHolder;
}

@Override
public void onBindViewHolder(@NonNull imgListHolder imgListHolder, int i) {
    final imgModel current = mImgModelList.get(i);
    imgUrl = mImgModelList.get(0).getImgUrl();
    Picasso.get().load(current.getImgUrl()).into(imgListHolder.mImageView);

    imgListHolder.mImageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           imgUrl = current.getImgUrl();
        }
    });
}

@Override
public int getItemCount() {
    return mImgModelList.size();
}

class imgListHolder extends RecyclerView.ViewHolder{
    ImageView mImageView;
    public imgListHolder(@NonNull View itemView) {
        super(itemView);
        mImageView = (ImageView)itemView.findViewById(R.id.singleimg);
    }
}

} // 这是活动类

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_image_list_);

    final Intent myIntent = getIntent();
    final String cateGory = myIntent.getStringExtra("Category");
    String subCategory = myIntent.getStringExtra("subCategory");
    mRelativeLayout = (RelativeLayout)findViewById(R.id.imgListLayout);
    selectedImage =(ImageView)findViewById(R.id.selectedImg);

    //mToolbar =(Toolbar)findViewById(R.id.toolbar);
   mRecyclerView = (RecyclerView)findViewById(R.id.imglistRecycler);
   //mToolbar.inflateMenu(R.menu.menu);
    data = new ArrayList<>();
   myRef.child(cateGory).child(subCategory).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
          for (DataSnapshot category : dataSnapshot.getChildren()) {
                if (category.child("like").exists()) {
                    imgModel temp = new imgModel(category.child("imgUrl").getValue().toString(), category.child("views").getValue().toString(),
                            category.child("like").getValue().toString(), category.child("share").getValue().toString());
                    data.add(temp);
                }


                mImageListAdapter = new imageListAdapter(imageList_Activity.this,data);
                mRecyclerView.setAdapter(mImageListAdapter);
                mRecyclerView.setLayoutManager(new GridLayoutManager(imageList_Activity.this,3));



            }

        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}

}

我想,当用户单击任何回收站视图图像时,意味着小图像,它将显示在回收站视图之外的大图像视图中。

【问题讨论】:

  • 试试这个,在Adapter中创建一个接口作为onItemClickListener,方法是在Activity中实现onClick(imgurl)。有把url设置成imageview?

标签: android android-recyclerview


【解决方案1】:

您可以使用界面来更新所选图像。在您的适配器中创建一个接口,例如:

 interface UpdateImage{
    void updateImageUrl(String imageurl);
}

现在在您的活动中实现此接口。在设置适配器时,只需添加 new imageListAdapter(imageList_Activity.this,data,this);

现在 onClick 项目只需调用

imgListHolder.mImageView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
       imgUrl = current.getImgUrl();
       updateImage.updateImageUrl(current.getImgUrl())
    }
});

在您的活动中,当您实现上述接口时,您将获得一个覆盖方法updateImageUrl。您可以使用此 URL 更新您的图像视图。

@Override
public void updateImageUrl(String imageurl) {
    Glide.with(this).load(imageUrl).into(imageView)
}

【讨论】:

    【解决方案2】:

    正如 Raghavendra 所说,创建一个接口类,然后将其传递到适配器内部。 让您的 Activity 实现该接口并在适配器内传递您的 Activity。

    Interface OnClick{ 
       public void clickAction()
    }
    
    //your adapter class
    Adapter {
       //your interface
       public OnClick onclick;
       //set your imageview click activity
       imageView.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {
          onClick.click;
       }});
    
    //now pass your interface from activity
    ImageListActivity implements OnClick {
       //pass to your adapter
       adapter.onClick = this
    }
    

    【讨论】:

    • 我的应用程序在实现接口后崩溃了,但是在看到你的adapter.onClick之后我意识到我犯了一个错误。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 2020-10-31
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    • 2022-01-01
    • 1970-01-01
    相关资源
    最近更新 更多