java - 如何一对一匹配元素?
问题描述
我有一个 Recyclerview,里面有 Imageviews。当我单击任何图像时,我想在图像上显示一些有关图像的信息。
好吧,我做到了,但似乎一切都是随机发生的......当我点击第一张图片时,信息出现在第二张图片上,当我点击第二张图片时它正常工作,当我点击第三张图片时,没有任何反应等。
这是我的一些代码;
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_item, parent, false);
myViewHolder = new MyViewHolder(view);
myViewHolder.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isUp) {
slideDown(myViewHolder.infoView);
} else {
slideUp(myViewHolder.infoView);
}
isUp = !isUp;
}
});
return myViewHolder;
}
class MyViewHolder extends RecyclerView.ViewHolder {
ImageView imageView;
public MyViewHolder(View itemView) {
super(itemView);
init();
}
void init() {
imageView = itemView.findViewById(R.id.imageViewID);
...
}
}
看来我应该对一些元素进行分组,或者有更好的主意吗?
滑动法;
// slide the view from below itself to the current position
public void slideUp(View view) {
view.setVisibility(View.VISIBLE);
infoView.animate().alpha(1.0f).setDuration(500);
ScaleAnimation animate = new ScaleAnimation(
1f, 1f, // Start and end values for the X axis scaling
0f, 1f, // Start and end values for the Y axis scaling
Animation.RELATIVE_TO_SELF, 0f, // Pivot point of X scaling
Animation.RELATIVE_TO_SELF, 1f); // toYDelta
animate.setDuration(800);
animate.setFillAfter(true);
view.startAnimation(animate);
}
我将 onClickListener 方法移至 onBindViewHolder,这很有意义,但结果没有改变。
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
holder.textView_name.setText(nameElement.get(position).text());
Picasso.get().load(imageElement.get(position).absUrl("src")).fit().into(holder.imageView);
holder.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isUp) {
myViewHolder.slideDown(myViewHolder.infoView);
} else {
myViewHolder.slideUp(myViewHolder.infoView);
}
isUp = !isUp;
}
});
}
解决方案
您需要在MyViewHolder类中添加 slideUp slideDown 方法
我认为不需要在onBindViewHolder中实现点击监听,只需将它放在init函数中即可。
void init() {
imageView = itemView.findViewById(R.id.imageViewID);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isUp) {
slideDown(v);
} else {
slideUp(v);
}
isUp = !isUp;
}
});
}
希望它有效!
推荐阅读
- flutter - Flutter Web,toByteData,await 永不返回
- flutter - 如何在 Flutter 的对象数组中检查键值 id 是否退出?
- javascript - 如何返回一个对象数组,每个对象有多少个计数
- haskell - Haskell 有界数据类型,由 value-bounds 构造
- java - Java 编译没有错误,运行第一行,然后不继续或结束
- php - 来自 ajax 调用的未定义 PHP 输出
- wordpress - 无法删除“帖子首先出现”RSS
- flutter - 输入'未来
' 不是类型 'bool' shared_preferences 的子类型 - java - 如何从给定的一组日期中找到每个月的最少日期
- python - 在 groupby 对象上扩展均值