首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用RecyclerView的可扩展列表?

使用RecyclerView的可扩展列表?
EN

Stack Overflow用户
提问于 2014-10-17 14:30:57
回答 6查看 74.5K关注 0票数 98

可以在新的RecyclerView中使用可扩展的列表项吗?就像ExpandableListView一样?

EN

回答 6

Stack Overflow用户

发布于 2015-03-20 18:29:24

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

当您想要展开一个部分时,您只需将新项添加到您的适配器的标题之后。执行此操作时,请记住调用notifyItemRangeInserted。要折叠一个部分,只需移除相关项,然后调用notifyItemRangeRemoved()。对于适当通知的任何数据更改,回收器视图将对视图进行动画处理。添加项目时,将创建一个新项目填充的区域,新项目逐渐淡入。删除是相反的。除了适配器之外,您需要做的就是设计视图样式,以便将逻辑结构传达给用户。

更新: Ryan Brooks现在已经写了一个关于如何做到这一点的article

票数 129
EN

Stack Overflow用户

发布于 2014-10-19 03:38:45

here获取示例代码实现

在ViewHolder的onClick中设置ValueAnimator

代码语言:javascript
复制
@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();

}

以下是最终的代码

代码语言:javascript
复制
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();

    }
}
票数 5
EN

Stack Overflow用户

发布于 2015-02-02 04:52:52

https://github.com/gabrielemariotti/cardslib

这个库实现了一个带有回收视图的可扩展列表(请参阅"CardViewNative“--> " list,Grid,and RecyclerView”--> "Expandable“下的演示应用程序)。它还有很多其他很酷的卡片/列表组合。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26419161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档