如何更改RecyclerView隐藏项目的可见性?

时间:2019-10-28 13:41:14

标签: java android android-recyclerview

我正在开发聊天应用程序。它具有回复动作的功能(例如Telegram / WhatsApp)。当用户单击回复的消息时,RecyclerView应滚动到声明的位置。但是,如果我设置了recyclerview隐藏项目的位置,则应用会抛出NullPoinerException。它仅适用于可见项目。

        holder.replyContainer.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                mRecyclerView.smoothScrollToPosition(m.content.getReply().getPosition());
                    View view = mRecyclerView.
                            findViewHolderForAdapterPosition(m.content.getReply().getPosition())
                            .itemView.findViewById(R.id.selected);
                    view.setVisibility(View.VISIBLE);
                    view.startAnimation(AnimationUtils.loadAnimation(mActivity, R.anim.fade_out));
            }
        });

1 个答案:

答案 0 :(得分:1)

我已修复它,滚动完成后必须调用方法的不可见项。因此,我在RecyclerView中添加了侦听器:

RecyclerView.OnScrollListener listener = new RecyclerView.OnScrollListener() {
  @Override
  public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
                                   super.onScrollStateChanged(recyclerView, newState);
      if (newState == RecyclerView.SCROLL_STATE_IDLE) {
          RecyclerView.ViewHolder holder = (RecyclerView.ViewHolder)
                mRecyclerView.findViewHolderForAdapterPosition(replyPosition);
                      if(holder != null) {
                           View view = holder.itemView.findViewById(R.id.selected);
                           view.setVisibility(View.VISIBLE);
                           view.startAnimation(AnimationUtils.loadAnimation(mActivity,
                                                   R.anim.fade_out));

                                       }

                                   }
                               }

  @Override
  public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);
  }
                           };
  mRecyclerView.addOnScrollListener(listener);
  mRecyclerView.smoothScrollToPosition(replyPosition);