Android 如何在RecyclerView中滚动到视图中的EditText并将其聚焦?
my RecyclerView中的每个项目都包含多个视图,包括一个EditText。为了响应用户操作,我想滚动到RecyclerView中的特定位置,并聚焦相应的EditText。 我可以滚动到以下位置:Android 如何在RecyclerView中滚动到视图中的EditText并将其聚焦?,android,android-recyclerview,Android,Android Recyclerview,my RecyclerView中的每个项目都包含多个视图,包括一个EditText。为了响应用户操作,我想滚动到RecyclerView中的特定位置,并聚焦相应的EditText。 我可以滚动到以下位置: recyclerView.smoothScrollToPosition(position); 把那个职位的收视者 RecyclerView.ViewHolder viewHolder = recyclerView.findViewHolderForAdapterPosition(positi
recyclerView.smoothScrollToPosition(position);
把那个职位的收视者
RecyclerView.ViewHolder viewHolder = recyclerView.findViewHolderForAdapterPosition(position);
然后在viewHolder视图中找到EditText,然后执行其余操作
问题是,当目标位置不可见时,
findViewHolderForAdapterPosition
返回null。我想我找到了一个解决方法:当视图可见时,可以使用
findViewHolderForAdapterPosition
访问该视图。否则,您必须滚动到其位置。但在执行此操作之前,您必须添加一个OnScrollListener
。布局更新完成并滚动完成后,可以使用findViewHolderForAdapterPosition
访问视图。
OnScrollListener
可能是这样的:
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == SCROLL_STATE_IDLE) {
RecyclerView.ViewHolder viewHolder = recyclerView.findViewHolderForAdapterPosition(position);
/*
find the view and focus on it here.
*/
recyclerView.removeOnScrollListener(this);
}
}