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

时间:2017-07-29 16:59:20

标签: android android-layout android-recyclerview android-adapter

在我的应用程序中,我应该显示来自服务器的一些数据,对于这个项目,我创建了选项按钮,当点击此选项按钮时,显示该用户的其他数据。
请参阅下图,了解我的意思: enter image description here

点击“...”更改布局并显示其他数据,点击“✕”关闭此布局并再次显示第一个布局。

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

但是,我想在滚动set(THREADS_PREFER_PTHREAD_FLAG ON) find_package(Threads REQUIRED) target_link_libraries(my_app Threads::Threads) 关闭此布局(信息布局)并显示基本布局(带图片)时,我想在滚动recyclerView时自动完成此工作。

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

我在适配器中使用此代码 点击...按钮时

recyclerView

点击✕按钮时

    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);
        }
    });

我想在滚动 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

在活动中初始化recyclerView:

    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);
        }
    });

我该怎么办?请帮帮我我的朋友< 3

2 个答案:

答案 0 :(得分:2)

为此你应该使用一个标志,如布尔值 为此,您应该在滚动recyclerView并将此标志传递给适配器时获得 比如这段代码:

    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);
        }
    });

将标志传递给适配器:

adapter = new YOURADAPTER(context, model, closeInfoLay);
在您的适配器中

,更改构造函数:

private boolean closeInfoLay;

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

然后关闭你的布局:

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

    }

我希望能帮助你的朋友

答案 1 :(得分:1)

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

    recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
          @Override
          public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                // close info layout logic...
          }
    }