Android 滚动将导致listView中折叠的项目取消折叠,RecyclerView.Adapter设置问题

Android 滚动将导致listView中折叠的项目取消折叠,RecyclerView.Adapter设置问题,android,android-recyclerview,Android,Android Recyclerview,我有一个扩展RecycleView.adapter的适配器,我遇到了一个问题,滚动将导致视图更改其可见性。我使用视图的可见性来模拟折叠或取消折叠的状态,滚动只是从15个项目的列表中重新设置最后和第一个项目的可见性 这些项目以文本视图显示的标题开头。单击该项将取消折叠该项,以显示与TextView一起显示的描述文本(我只是将包含描述文本的视图的可见性设置为VISIBLE)。单击描述文本将折叠该项目(可见性设置为“已消失”),以仅显示初始标题文本 为什么当我滚动到最后一个项目时,即使没有按下,它也会

我有一个扩展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);
        }
    });