是否可以将可展开的列表项与新的 RecyclerView 一起使用?喜欢 ExpandableListView?
https://github.com/gabrielemariotti/cardslib
这个库实现了一个带有recyclerview的可扩展列表(参考“CardViewNative”下的演示应用程序)
从这里获取示例代码实现
在ViewHolder的onClick内设置值Animator
@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();
}
}
使用股票布局管理器很容易做到这一点,这完全取决于您如何管理您的适配器。
当您想要展开一个部分时,您只需在标题之后向适配器添加新项目即可。请记住在执行此操作时调用 notifyItemRangeInserted。要折叠一个部分,您只需删除相关项目,然后调用 notifyItemRangeRemoved()。对于收到适当通知的任何数据更改,回收程序视图将对视图进行动画处理。添加项目时,将创建一个要用新项目填充的区域,新项目将淡入。删除则相反。除了适配器之外,您需要做的就是设置视图的样式,以将逻辑结构传达给用户。
更新:Ryan Brooks现在已经写了一篇关于如何做到这一点的文章。
我需要制作一个可扩展的 ,每次点击只能打开一个项目(所有其他项目都必须关闭)。我知道有可能在的帮助下做到这一点,然后使用下一个代码: 但是有没有办法使用来做同样的事情?
我已经被困在这个问题上几天了,真的需要一些帮助和理解如何用DiffUtil设置RecylerView(RV),似乎无论我尝试什么,我都无法让RV更新。我会浏览我所拥有的,希望有人能解释一下我做错了什么。 应用程序启动 创建视图模型, 然后在ViewModel中填充LiveDataList。 LayoutManager和ListAdapter应用于RV 为什么在LiveDataList中添加或删除一
问题内容: 我想将一个字符串添加到列表中: 但它打印。这是为什么? 问题答案: 该函数是就地函数,即它将对原始列表本身进行更改。来自文档 通过添加 给定 列表中的所有项目来扩展列表;等效于a [len(a):] =L。 因此,您无需将其重新分配回列表变量。 你可以做 然后当您打印时 更好的方法 如下所述使用是更好的方法。
我有一个像相册这样的项目列表,我通过RecyclerView显示它。 此外,每个项目都有一个按钮,通过单击该按钮可以向服务器发送一些数据,然后滚动到列表中的下一个位置。 所以我的问题是: 如果调用了smoothScrollToPosition()方法,如何防止RecyclerView手动滚动(手势),但滚动到某个位置?
我正在寻找在Android中使用列表适配器和Recyview适配器的区别。关于性能的任何不同,使用它们的利弊。
我已经在我的应用程序中成功实现了RecyclerView。RecyclerView有三项,即标题(TextView)、图像按钮和描述(TextView)。 标题和图像按钮始终可见,而通过单击图像按钮切换描述的可见性(默认设置为“已消失”)。 我遇到的问题是,当您单击一个项目中的ImageButton并且描述变得可见时,当您向下滚动或向上滚动时,即使我没有单击ImageButton以使其可见,第五个