Android 滚动将导致listView中折叠的项目取消折叠,RecyclerView.Adapter设置问题
我有一个扩展RecycleView.adapter的适配器,我遇到了一个问题,滚动将导致视图更改其可见性。我使用视图的可见性来模拟折叠或取消折叠的状态,滚动只是从15个项目的列表中重新设置最后和第一个项目的可见性 这些项目以文本视图显示的标题开头。单击该项将取消折叠该项,以显示与TextView一起显示的描述文本(我只是将包含描述文本的视图的可见性设置为VISIBLE)。单击描述文本将折叠该项目(可见性设置为“已消失”),以仅显示初始标题文本 为什么当我滚动到最后一个项目时,即使没有按下,它也会取消折叠。此外,如果我有我的第一个项目去折叠滚动到底部将折叠第一个项目。这是我的设置Android 滚动将导致listView中折叠的项目取消折叠,RecyclerView.Adapter设置问题,android,android-recyclerview,Android,Android Recyclerview,我有一个扩展RecycleView.adapter的适配器,我遇到了一个问题,滚动将导致视图更改其可见性。我使用视图的可见性来模拟折叠或取消折叠的状态,滚动只是从15个项目的列表中重新设置最后和第一个项目的可见性 这些项目以文本视图显示的标题开头。单击该项将取消折叠该项,以显示与TextView一起显示的描述文本(我只是将包含描述文本的视图的可见性设置为VISIBLE)。单击描述文本将折叠该项目(可见性设置为“已消失”),以仅显示初始标题文本 为什么当我滚动到最后一个项目时,即使没有按下,它也会
public class TextAdapter extends RecyclerView.Adapter<TextAdapter.ViewHolder> {
private static final String TAG = TextAdapter.class.getSimpleName();
private Context mContext;
private ArrayList<TextDescription> alTextDesc;
public TextAdapter(Context context, ArrayList<TextDescription> textDesc) {
mContext = context;
alTextDesc = textDesc;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(mContext).inflate(R.layout.ui_item_text_desc, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
final TextDescription textDesc = alTextDesc.get(position);
holder.llParent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
textDesc.isExpanded = !textDesc.isExpanded;
setExpanded(holder, textDesc);
}
});
setExpanded(holder, textDesc);
}
@Override
public int getItemCount() {
return alTextDesc.size();
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
}
private static void setExpanded(ViewHolder holder, TextDescription textDesc) {
if (textDesc != null) {
if (textDesc.isExpanded) {
// display full description
llContent.setVisibility(View.VISIBLE);
} else {
// display title
llContent.setVisibility(View.GONE);
}
}
}
public static class ViewHolder extends RecyclerView.ViewHolder {
LinearLayout llParent;
LinearLayout llContent;
public ViewHolder(View v) {
super(v);
llParent = (LinearLayout) v.findViewById(R.id.ll_parent);
llContent = (LinearLayout) v.findViewById(R.id.ll_content);
}
}
有没有关于我做错了什么的建议?提前谢谢你
编辑
我还尝试在更改属性扩展值后更新ArrayList,结果仍然相同
holder.llParent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
textDesc.isExpanded = !textDesc.isExpanded;
alTextDesc.set(position, textDesc); //tried to update the list with updated value
setExpanded(holder, textDesc);
}
});
这个问题是由于观点的重复使用。 更改展开的标志后,需要更新列表
alTextDesc
,以便在回收视图时,将标志状态保存在列表alTextDesc
中,并且它将根据保存的标志状态再次折叠/展开
holder.llParent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
textDesc.isExpanded = !textDesc.isExpanded;//Update the list with the updated object now
setExpanded(holder, textDesc);
}
});
这仍然不起作用。在textDesc.isExpanded=下!textDesc.isExpanded我添加了行alTextDesc.set(position,attribute)以使用新的属性值更新列表,同样的问题仍然存在。请看我的最新回复+1表示尝试回答。什么是
属性
?对不起,我打错了。您没有发布正确的代码是textDesc object。在某些地方,您使用了alAttributes
,比如这里-@Override public int getItemCount(){return alAttributes.size();}
。请先发布系统正确的代码。实际上,你是正确的。对不起,冲突不是你的答案。这就是我向列表中添加对象的方式。谢谢你,问题解决了。
holder.llParent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
textDesc.isExpanded = !textDesc.isExpanded;//Update the list with the updated object now
setExpanded(holder, textDesc);
}
});