RecyclerView项目有时无法正确扩展。展开商品的最佳方式是什么?

时间:2018-03-31 18:15:45

标签: 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是一个整数,指向当前展开的项目的位置。

在我的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.setVisibility(View.VISIBLE);,有时lytContent也不会扩展。此外,当我输入大约7个项目时,项目将永远不会扩展,而lytContent.setVisibility(View.VISIBLE);仍会被调用。

我不知道为什么这些代码不起作用,这让我在最后几天疯狂。我想过为这个使用一些库,这样我也可以使用一些扩展的动画。我真的很感激一些提示和想法。

1 个答案:

答案 0 :(得分:0)

按如下方式更改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);
}