Android 在recyclerview中使用setVisibility()的正确方法是什么
我有一个视图,可以点击按钮获取更多信息。信息最初是隐藏的,单击后显示。如果我单击了它,然后向下滚动,布局将被重用。现在,新视图显示隐藏的信息,而无需单击,因为它是重复使用的 如何避免或解决这个问题Android 在recyclerview中使用setVisibility()的正确方法是什么,android,android-recyclerview,Android,Android Recyclerview,我有一个视图,可以点击按钮获取更多信息。信息最初是隐藏的,单击后显示。如果我单击了它,然后向下滚动,布局将被重用。现在,新视图显示隐藏的信息,而无需单击,因为它是重复使用的 如何避免或解决这个问题 编辑:一种方法是在onBindViewHolder中再次隐藏视图。但是想要一个更好的方法您遇到这个问题的原因是RecyclerView尝试循环视图,以防止在用户滚动时创建每个视图 所以您需要保存当前位置对象的状态,因为您不需要在这里推送适配器,我尝试在示例适配器中解释它 @Override publi
编辑:一种方法是在onBindViewHolder中再次隐藏视图。但是想要一个更好的方法您遇到这个问题的原因是RecyclerView尝试循环视图,以防止在用户滚动时创建每个视图 所以您需要保存当前位置对象的状态,因为您不需要在这里推送适配器,我尝试在示例适配器中解释它
@Override
public void onBindViewHolder(final ContactViewHolder contactViewHolder, final int position) {
SampleObject eachObject = data.get(position);
if(eachObject.getCurrentState() == SampleObject.CLICKED){
// hide button
// show additional information
}
else {
// show button
// hide additional information view
}
在您的ContactViewHolder类中
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.show_data:
SampleObject eachObject = data.get(position);
eachObject.setCurrentState(SampleObject.CLICKED);
break;
您必须跟踪单击的位置
//global scope
int pos_clicked=-1;
class View_Holder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView txt;
public View_Holder(View itemView) {
super(itemView);
txt = (TextView) itemView.findViewById(R.id.txt);
txt.setOnclickListener(this);
}
@Override
public void onClick(View v) {
Intent intent;
pos_clicked=getAdapterPosition();
notifyDataSetChanged();
}}
@Override
public void onBindViewHolder(View_Holder holder, int position) {
if(pos_clicked==position){
holder.txt.setVisibility(View.VISIBLE);
}
else{
holder.txt.setVisibility(View.GONE);
}}
提供适配器代码绑定数据时必须设置可见性。这就是bind方法的目的。您想要哪种更好的解决方案?而不是撤消视图上以前的所有操作。能告诉它重建吗?@suku我不知道你在干什么。撤消以前的所有操作是什么意思?毫无意义。你说的重建是什么意思?能告诉我们重建什么吗?如果您不明白,请发布适配器的代码,我可以为您修复…Recyclerview重用旧视图,因此我想知道是否可以强制Recyclerview重新格式化最初使用的错误单词。Anton澄清说,这将花费比在重用视图中撤消视图更改更多的时间。