当前位置: 首页 > 知识库问答 >
问题:

可扩展列表与回收人员视图?

慕高阳
2023-03-14

是否可以将可展开的列表项与新的 RecyclerView 一起使用?喜欢 ExpandableListView?

共有3个答案

钱嘉致
2023-03-14

https://github.com/gabrielemariotti/cardslib

这个库实现了一个带有recyclerview的可扩展列表(参考“CardViewNative”下的演示应用程序)

陶睿
2023-03-14

从这里获取示例代码实现

在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();

    }
}
艾修筠
2023-03-14

使用股票布局管理器很容易做到这一点,这完全取决于您如何管理您的适配器。

当您想要展开一个部分时,您只需在标题之后向适配器添加新项目即可。请记住在执行此操作时调用 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以使其可见,第五个