首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Android中滚动RecyclerView时如何更改布局?

在Android中滚动RecyclerView时如何更改布局?
EN

Stack Overflow用户
提问于 2017-07-29 16:59:19
回答 2查看 466关注 0票数 1

在我的应用程序中,我应该显示来自服务器的一些数据,对于这一项,我会创建选项按钮,当单击此选项按钮时,会向用户显示该项的其他数据。

请看下图了解我的意思:

当单击“.”更改布局并显示其他数据时,当单击"✕"时,关闭该布局并再次显示第一个布局。

我可以在单击.时显示其他布局,在单击时可以关闭此布局。

但是,当滚动recyclerView关闭此布局(信息布局)并显示基本布局(带有图像)时,我希望在滚动recyclerView时自动完成此工作。

例如, :如果显示信息布局,当滚动 recyclerView关闭此信息布局并再次显示基本布局时。

我在适配器中使用这些代码。

点击时.按钮:

代码语言:javascript
复制
    holder.tvTonightOpenMoreInfo.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            YoYo.with(Techniques.SlideInDown)
                    .duration(500)
                    .withListener(new Animator.AnimatorListener() {
                        @Override
                        public void onAnimationStart(Animator animator) {

                        }

                        @Override
                        public void onAnimationEnd(Animator animator) {
                            holder.tvTonightOpenMoreInfo.setVisibility(View.GONE);
                            holder.tvTonightCloseMoreInfo.setVisibility(View.VISIBLE);
                            holder.tvTonightMoreInfoLay.setVisibility(View.VISIBLE);
                        }

                        @Override
                        public void onAnimationCancel(Animator animator) {

                        }

                        @Override
                        public void onAnimationRepeat(Animator animator) {

                        }
                    })
                    .playOn(holder.tvTonightMoreInfoLay);
        }
    });

时单击✕按钮:

代码语言:javascript
复制
    holder.tvTonightCloseMoreInfo.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            YoYo.with(Techniques.SlideOutUp)
                    .duration(500)
                    .withListener(new Animator.AnimatorListener() {
                        @Override
                        public void onAnimationStart(Animator animator) {

                        }

                        @Override
                        public void onAnimationEnd(Animator animator) {
                            holder.tvTonightOpenMoreInfo.setVisibility(View.VISIBLE);
                            holder.tvTonightCloseMoreInfo.setVisibility(View.GONE);
                        }

                        @Override
                        public void onAnimationCancel(Animator animator) {

                        }

                        @Override
                        public void onAnimationRepeat(Animator animator) {

                        }
                    })
                    .playOn(holder.tvTonightMoreInfoLay);
        }
    });

滚动 recyclerView调用此代码时,我希望:

代码语言:javascript
复制
    holder.tvTonightCloseMoreInfo.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            YoYo.with(Techniques.SlideOutUp)
                    .duration(500)
                    .withListener(new Animator.AnimatorListener() {
                        @Override
                        public void onAnimationStart(Animator animator) {

                        }

                        @Override
                        public void onAnimationEnd(Animator animator) {
                            holder.tvTonightOpenMoreInfo.setVisibility(View.VISIBLE);
                            holder.tvTonightCloseMoreInfo.setVisibility(View.GONE);
                        }

                        @Override
                        public void onAnimationCancel(Animator animator) {

                        }

                        @Override
                        public void onAnimationRepeat(Animator animator) {

                        }
                    })
                    .playOn(holder.tvTonightMoreInfoLay);
        }
    });

在活动中初始化recyclerView :

代码语言:javascript
复制
    layoutManager = new GridLayoutManager(context, 2);
    filterRecyclerView.setLayoutManager(layoutManager);
    filterRecyclerView.setHasFixedSize(true);
    filterRecyclerView.setAdapter(tvTonightAdapter);

我怎么能做到呢?请帮我我的friend<3

EN

回答 2

Stack Overflow用户

发布于 2017-07-29 17:54:40

为此,您应该使用一个标志,例如布尔值。

为此,您应该在滚动recyclerView并将此标志传递给适配器时获得。

如本代码:

代码语言:javascript
复制
    boolean closeInfoLay = false;
    filterRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            if (dy > 0 || dy < 0) {
                closeInfoLay = true;
            } else {
                closeInfoLay = false;
            }

            adapter.notifyDataSetChanged();
        }

        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            if (newState == RecyclerView.SCROLL_STATE_IDLE) {
            }
            super.onScrollStateChanged(recyclerView, newState);
        }
    });

将标志传递给适配器:

代码语言:javascript
复制
adapter = new YOURADAPTER(context, model, closeInfoLay);

在适配器中,更改构造函数:

代码语言:javascript
复制
private boolean closeInfoLay;

public TvToNightListAdapter(Context context, List<ModelList> model, boolean closeInfoLay) {
    this.context = context;
    this.model = model;
    this.closeInfoLay = closeInfoLay;
}

然后关闭布局:

代码语言:javascript
复制
    if (closeInfoLay) {
        YoYo.with(Techniques.SlideOutUp)
                .duration(500)
                .withListener(new Animator.AnimatorListener() {
                    @Override
                    public void onAnimationStart(Animator animator) {

                    }

                    @Override
                    public void onAnimationEnd(Animator animator) {
                        holder.tvTonightOpenMoreInfo.setVisibility(View.VISIBLE);
                        holder.tvTonightCloseMoreInfo.setVisibility(View.GONE);
                    }

                    @Override
                    public void onAnimationCancel(Animator animator) {

                    }

                    @Override
                    public void onAnimationRepeat(Animator animator) {

                    }
                })
                .playOn(holder.tvTonightMoreInfoLay);

    }

我希望能帮助你我的朋友

票数 2
EN

Stack Overflow用户

发布于 2017-07-29 17:02:48

您可以使用RecyclerView侦听OnScrollListener的滚动事件并更改布局:

代码语言:javascript
复制
    recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
          @Override
          public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                // close info layout logic...
          }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45391820

复制
相关文章

相似问题

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