目前,我在使 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/