Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何更改RecyclerView隐藏项的可见性?_Java_Android_Android Recyclerview - Fatal编程技术网

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

Java 如何更改RecyclerView隐藏项的可见性?,java,android,android-recyclerview,Java,Android,Android Recyclerview,我正在开发聊天应用程序。它有一个功能,即回复操作(如电报/WhatsApp)。当用户单击回复消息时,RecyclerView应滚动至声明的位置。但若我设置了recyclerview的隐藏项的位置,应用程序就会抛出一个NullPoinerException。它仅适用于可见项 holder.replyContainer.setOnClickListener(new View.OnClickListener() { @Override p

我正在开发聊天应用程序。它有一个功能,即回复操作(如电报/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));
            }
        });

我已经修复了它,方法的不可见项必须在滚动完成后调用。因此,我将listener添加到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);

共享您的错误日志。致命异常:主PID:26983 java.lang.NullPointerException:尝试读取空对象引用上的字段“android.view.view androidx.recyclerview.widget.recyclerview$ViewHolder.itemView”。您得到了
空指针异常
,因为
findViewHolderForAdapterPosition(m.content.getReply().getPosition())
为您提供
null
。我知道,如何更改recyclerview的隐藏项?你对做这件事有什么建议吗?(回复特定消息)您是否尝试过mRecyclerView.smoothScrollToPosition(m.content.getReply().getPosition()-1);