Recyclerview项目在滚动时重置

时间:2015-06-26 14:41:49

标签: android android-recyclerview

所以,这是我的问题。我的recyclerview项目底部有一个我最初设置为GONE的视图。现在,当他们点击它们时,我想让它们再次可见。所以在onClick方法中我将视图设置为Visible。一切都很好,但是当我向下滚动并向上滚动时,视图会再次被隐藏。我想这与ViewHolder模式有关。我想保持状态不变,即打开状态。我该怎么做?谢谢。

查看持有人:

public static class CustomCardViewHolder extends RecyclerView.ViewHolder {
    View mCard;
    View mFooter;
    ImageView mIcon;
    TextView mTitle;
    TextView mSummary;

    public CustomCardViewHolder(View view) {
        super(view);
        mCard = view.findViewById(R.id.container);
        mCard.setTag(this);
        mFooter = view.findViewById(R.id.footer); // view to be shown or hidden
        mIcon = (ImageView) view.findViewById(R.id.icon);
        mTitle = (TextView) view.findViewById(R.id.title);
        mSummary = (TextView) view.findViewById(R.id.summary);
    }

的OnClick:

@Override
public void onClick(View view) {
    CustomCardViewHolder holder = (CustomCardViewHolder) view.getTag();
    if(holder.mFooter.getVisibility() == View.GONE) {
        expand(holder.mFooter); // this is just an animation and I'm setting the visibility to visible
        notifyItemChanged(holder.getPosition());
        notifyAll();
    } else {
        collapse(holder.mFooter); // similarly this too
        notifyItemChanged(holder.getPosition());
        notifyAll();
    }
}

编辑:上传的代码。此外,我尝试在onClick中更新Item的布尔值并在onBindViewHolder上强制执行它。问题是我在工具栏后面有一种假视图(保险杠)。当我在recyclerview底部展开项目并再次向上滚动时,它会被隐藏。随着我继续滚动回收者视图,它逐渐开始出现。

我的活动xml:

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <include layout="@layout/widget_bumper" />

    <include layout="@layout/widget_recyclerview"/>

    <include layout="@layout/widget_toolbar" />

</FrameLayout>

和我的保险杠:

<?xml version="1.0" encoding="utf-8"?>
<View
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/bumper"
    android:layout_width="match_parent"
    android:layout_height="@dimen/widget_bumper_height"
    android:background="?colorPrimary" >
</View>

2 个答案:

答案 0 :(得分:0)

是的,你认为没错,你必须保留一些标志来确定视图中哪个项目可见,哪些不可见。根据您的不同,您必须设置View.VISIBLE或View.GONE。

试一试,你就会成功。如果没有,请分享代码我会说要做什么。

答案 1 :(得分:0)

将RecyclerView更新到最新的库。这解决了这个问题。