可以在新的RecyclerView中使用可扩展的列表项吗?就像ExpandableListView一样?
发布于 2015-03-20 18:29:24
使用常用的LayoutManagers很容易做到这一点,这完全取决于您如何管理适配器。
当您想要展开一个部分时,您只需将新项添加到您的适配器的标题之后。执行此操作时,请记住调用notifyItemRangeInserted。要折叠一个部分,只需移除相关项,然后调用notifyItemRangeRemoved()。对于适当通知的任何数据更改,回收器视图将对视图进行动画处理。添加项目时,将创建一个新项目填充的区域,新项目逐渐淡入。删除是相反的。除了适配器之外,您需要做的就是设计视图样式,以便将逻辑结构传达给用户。
更新: Ryan Brooks现在已经写了一个关于如何做到这一点的article。
发布于 2014-10-19 03:38:45
从here获取示例代码实现
在ViewHolder的onClick中设置ValueAnimator
@Override
public void onClick(final View view) {
if (mOriginalHeight == 0) {
mOriginalHeight = view.getHeight();
}
ValueAnimator valueAnimator;
if (!mIsViewExpanded) {
mIsViewExpanded = true;
valueAnimator = ValueAnimator.ofInt(mOriginalHeight, mOriginalHeight + (int) (mOriginalHeight * 1.5));
} else {
mIsViewExpanded = false;
valueAnimator = ValueAnimator.ofInt(mOriginalHeight + (int) (mOriginalHeight * 1.5), mOriginalHeight);
}
valueAnimator.setDuration(300);
valueAnimator.setInterpolator(new LinearInterpolator());
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
public void onAnimationUpdate(ValueAnimator animation) {
Integer value = (Integer) animation.getAnimatedValue();
view.getLayoutParams().height = value.intValue();
view.requestLayout();
}
});
valueAnimator.start();
}以下是最终的代码
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private TextView mFriendName;
private int mOriginalHeight = 0;
private boolean mIsViewExpanded = false;
public ViewHolder(RelativeLayout v) {
super(v);
mFriendName = (TextView) v.findViewById(R.id.friendName);
v.setOnClickListener(this);
}
@Override
public void onClick(final View view) {
if (mOriginalHeight == 0) {
mOriginalHeight = view.getHeight();
}
ValueAnimator valueAnimator;
if (!mIsViewExpanded) {
mIsViewExpanded = true;
valueAnimator = ValueAnimator.ofInt(mOriginalHeight, mOriginalHeight + (int) (mOriginalHeight * 1.5));
} else {
mIsViewExpanded = false;
valueAnimator = ValueAnimator.ofInt(mOriginalHeight + (int) (mOriginalHeight * 1.5), mOriginalHeight);
}
valueAnimator.setDuration(300);
valueAnimator.setInterpolator(new LinearInterpolator());
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
public void onAnimationUpdate(ValueAnimator animation) {
Integer value = (Integer) animation.getAnimatedValue();
view.getLayoutParams().height = value.intValue();
view.requestLayout();
}
});
valueAnimator.start();
}
}发布于 2015-02-02 04:52:52
https://github.com/gabrielemariotti/cardslib
这个库实现了一个带有回收视图的可扩展列表(请参阅"CardViewNative“--> " list,Grid,and RecyclerView”--> "Expandable“下的演示应用程序)。它还有很多其他很酷的卡片/列表组合。
https://stackoverflow.com/questions/26419161
复制相似问题