ViewHolder Pattern with Views inside Views 显示重复
Posted
技术标签:
【中文标题】ViewHolder Pattern with Views inside Views 显示重复【英文标题】:ViewHolder Pattern with Views inside Views shows duplicates 【发布时间】:2019-05-25 04:57:19 【问题描述】:我有一个 .xml 文件,它是 ListView 的一行,其中包含这样的布局:
<relativeLayout>
<Textview username blah blah/>
<include
android:id="@+id/like_button_layout"
layout="@layout/like" />
<relativeLayout>
现在,当我想在我的适配器中使用 ViewHolder 模式时,它只会为这种“喜欢”布局(其中包含图像和文本视图)显示重复值 我不知道为什么。这是java代码:
private class ViewHolder
public TextView userName;
public View likeButtonLayout;
@Override
public View getView(final int position, View convertView, ViewGroup parent)
ViewHolder holder;
final Context context = parent.getContext();
if (convertView == null)
convertView =
LayoutInflater.from(context).inflate(R.layout.panel_talk_topic, parent, false);
holder = new ViewHolder();
holder.userName = convertView.findViewById(R.id.user_name);
holder.likeButtonLayout = convertView.findViewById(R.id.like_button_layout);
convertView.setTag(holder);
else
holder = (ViewHolder) convertView.getTag();
ImageView likeButtonImage =
holder.likeButtonLayout.findViewById(R.id.like_button_imageView);
TextView likeCountText = holder.likeButtonLayout.findViewById(R.id.like_count_textView);
.
.
.
用户名都是正确的,但我认为在使用我不知道的视图持有者模式时,需要有一种特殊的方式来膨胀视图内的视图。想法?
【问题讨论】:
一些问题.. 你为什么不使用回收站视图??什么是转换视图?你说的重复是什么意思?请使用 logcats 或屏幕截图提供问题示例 我不能使用回收站视图,我希望得到这个问题。重复我的意思是每 5 行,likeCountText 和 likeButtonImage 中的值与前面的行相似。有一个重复的模式,但是每行中的所有用户名都不同。 我想知道你为什么不能使用回收站视图 参考这个链接:- ***.com/a/51950438/3946958 所有答案都没有帮助,但谢谢:( 【参考方案1】:这发生在回收器视图中,也许它也发生在列表视图中。事情在回收器视图中,视图被回收,并且一个视图持有者被一次又一次地使用。这就是为什么一个视图持有者的状态是持续存在的。 我通常做的解决它,只是在 onBindViewHolder()
的第一行重置状态【讨论】:
以上是关于ViewHolder Pattern with Views inside Views 显示重复的主要内容,如果未能解决你的问题,请参考以下文章
wemall app商城源码Android中ViewHolder详细解释
Android踩坑日记:RecyclerView中EditText和ImageView的ViewHolder复用坑
Android踩坑日记:RecyclerView中EditText和ImageView的ViewHolder复用坑
Generic repository pattern and Unit of work with Entity framework
[D3] Animate with the General Update Pattern in D3 v4
Implement Find and replace (find given pattern and replace it with a given string)