Как прокрутить и сфокусировать EditText внутри представления в RecyclerView? - PullRequest
0 голосов
/ 20 января 2020

Каждый элемент в моем RecyclerView содержит несколько представлений, включая EditText. В ответ на действия пользователя я хочу прокрутить до определенной позиции c в RecyclerView и сфокусировать соответствующий EditText. Я могу прокрутить до позиции:

recyclerView.smoothScrollToPosition(position);

и получить ViewHolder этой позиции

RecyclerView.ViewHolder viewHolder = recyclerView.findViewHolderForAdapterPosition(position);

, а затем найти этот EditText в виде viewHolder и сделать все остальное.

Проблема в том, что, когда целевая позиция не видна, findViewHolderForAdapterPosition возвращает ноль.

1 Ответ

0 голосов
/ 21 января 2020

Полагаю, я нашел обходной путь:
Когда представление видно, к нему можно получить доступ, используя 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...