目前我在使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);
仍会被调用。
我不知道为什么这些代码不起作用,这让我在最后几天疯狂。我想过为这个使用一些库,这样我也可以使用一些扩展的动画。我真的很感激一些提示和想法。
答案 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);
}