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