Android 使用SmoothScroller时可一次单击单个项目

Android 使用SmoothScroller时可一次单击单个项目,android,android-recyclerview,Android,Android Recyclerview,我有以下Github示例: 在适配器类中,当用户单击某个项时,我有以下代码: boolean expanded = contact.isExpanded(); contact.setExpanded(!expanded); notifyItemChanged(getAdapterPosition()); if (contact.isExpanded()) { mSmoothScroller.setTargetPosition(getAdapterPosition());

我有以下Github示例:

在适配器类中,当用户单击某个项时,我有以下代码:

boolean expanded = contact.isExpanded();
contact.setExpanded(!expanded);
notifyItemChanged(getAdapterPosition());

if (contact.isExpanded()) {
      mSmoothScroller.setTargetPosition(getAdapterPosition());
      new Handler().postDelayed(() ->
         mRecyclerView.getLayoutManager().startSmoothScroll(mSmoothScroller), 100);
}
当我同时单击包含ChildView的两个项目时,会出现以下异常:

java.lang.IllegalArgumentException: Invalid target position
        at android.support.v7.widget.RecyclerView$SmoothScroller.start(RecyclerView.java:11377)
        at android.support.v7.widget.RecyclerView$LayoutManager.startSmoothScroll(RecyclerView.java:8090)
        at com.sample.android.contact.ContactsAdapter$ViewHolder.lambda$onClick$0$ContactsAdapter$ViewHolder(ContactsAdapter.java:375)
        at com.sample.android.contact.ContactsAdapter$ViewHolder$$Lambda$0.run(Unknown Source:2)
        at android.os.Handler.handleCallback(Handler.java:789)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6944)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

我不想删除
处理程序。postDelayed
,而是在寻找一种解决方案,使一次只能单击单个项目?

我通过将
setTargetPosition
移动到
处理程序来解决问题。postDelayed

new Handler().postDelayed(() -> {
                    mSmoothScroller.setTargetPosition(getAdapterPosition());
                    mRecyclerView.getLayoutManager().startSmoothScroll(mSmoothScroller);
                }, 100);

您的示例中的提交说明它已经解决了,不是吗?请显示整个适配器类好吗?@LukasAnda,我找到了一个解决方案,作为我的答案,但我不确定这是否是最好的方法。@Ümañgßrmån