java - RecyclerView 项目有时无法正确扩展。扩展项目的最佳方式?

标签 java android android-recyclerview

目前,我在使 RecyclerView 项目可扩展方面遇到了麻烦。一次只能扩展一个项目。我已经通过以下代码实现了它:

@Override
public void onBindViewHolder(final myViewHolder viewHolder, int position) {

    viewHolder.lytHeader.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (currentItem != viewHolder.getAdapterPosition()) {
                currentItem = viewHolder.getAdapterPosition()
                notifyDataSetChanged();
            } else {
                viewHolder.expand();
            }
        }
    });

    if (routineHolder.getAdapterPosition() == pointer) {
        viewHolder.expand();
    } else {
        viewHolder.collapse();
    }
}

currentItem 是一个 Integer,它指向当前展开的 Item 的位置。

在我的 ViewHolder 中我有这些方法:

public void expand() {
    if (lytContent.getVisibility() == View.VISIBLE) {
        lytContent.setVisibility(View.GONE);
    } else if (lytContent.getVisibility() == View.GONE) {
        lytContent.setVisibility(View.VISIBLE);
    }
}

public void collapse() {
    lytContent.setVisibility(View.GONE);
}

lytContent 是可展开的布局,位于 lytHeader 下方,onClickListener 使 lytContent 展开。

首先,我认为这很好用,但经过一段时间的测试后,我注意到有时 lytContent 不会扩展,即使 lytContent.setVisibility(View.VISIBLE); 被调用。此外,当我放入超过 7 个项目时,这些项目将永远不会扩展,而 lytContent.setVisibility(View.VISIBLE); 仍然会被调用。

我不知道为什么这些代码不起作用,在过去的几天里它一直让我发疯。我考虑过为此使用一些库,这样我也可以使用一些扩展动画。我真的很感激一些提示和想法。

最佳答案

按如下方式更改 onBindView。

@Override
public void onBindViewHolder(final myViewHolder viewHolder, int position) {

    if(viewHolder.getAdapterPosition()==currentItem){
        viewHolder.expand();
    } else {
        viewHolder.collapse();
    }
 
    viewHolder.lytHeader.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (currentItem != viewHolder.getAdapterPosition()) {
                currentItem = viewHolder.getAdapterPosition();            
            }
            notifyDataSetChanged();
        }
    });
}

并更改扩展方法如下。

public void expand() {
    lytContent.setVisibility(View.VISIBLE);
}

public void collapse() {
    lytContent.setVisibility(View.GONE);
}

关于java - RecyclerView 项目有时无法正确扩展。扩展项目的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49590928/

相关文章:

java - 从当前 JFrame 打开新的 JFrame

适用于 Google TV 的 Android 应用显示 0 台设备

java - 如何在不滚动到顶部的情况下将新项目添加到 recyclerview

c# - 旋转我正在查看的对象 (ARFoundation)

android - ViewPager 滑动不适用于 RecyclerView

android - 如何将 OnClickListener 设置为 RecyclerView 中的两个按钮?

java - 无法使用 of# MySQL 创建表

java - 如何理解这个 Java 8 Stream collect() 方法?

java - android - if语句的switch case返回值

android - 将recyclerview的滚动条放在父布局android的末尾