Android: как использовать recyclerView.findViewHolderForAdapterPosition внутри класса Recycle View Cursor Adapter - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь получить видоискатель определенной позиции из вида корзины.

Я обнаружил, что сделал это в MainActivity:

viewHolderRec = recyclerViewInstance.findViewHolderForAdapterPosition(vHID);

Хорошо работает внутри моей MainActivity.

Но, когда я попытался реализовать то же самое в моем адаптере курсора представления рециркуляции, как это:

Я изменил курсор для повторного просмотра:

В моей основной деятельности:

    final RecyclerView recyclerView = findViewById(R.id.recycle_view);
    LinearLayoutManager manager = new LinearLayoutManager(getApplicationContext());
    recyclerView.setLayoutManager(manager);
    recyclerView.setNestedScrollingEnabled(true);
    mCursorAdapter = new RecycleCursorAdapter(this, null, recyclerView);
    recyclerView.setAdapter(mCursorAdapter);

В RecycleCursorAdapter:

RecyclerView recyclerViewInstance;

public RecycleCursorAdapter(Context context, Cursor cursor, RecyclerView recyclerView) {
    super(context, cursor);
    recyclerViewInstance = recyclerView;
}
 @Override
public void onBindViewHolder(ChatCursorAdapter3.ViewHolder viewHolder, Cursor cursor) {
    ChatListItem myListItem = ChatListItem.fromCursor(cursor);
    int vHID = viewHolder.getAdapterPosition();

    viewHolderRec = (ViewHolder) recyclerViewInstance.findViewHolderForAdapterPosition(vHID - 1);
}

Но viewHolderRec имеет значение null.

Я хочу получить видоискатель вида, который находится над текущим viewHolder.

Я просто хочу знать, как я могу заставить это работать. Я хочу использовать метод findViewHolderForAdapterPosition () внутри моего адаптера курсора представления повторного просмотра.

Да, я знаю, что могу использовать

viewHolder.getOldPosition()

Но он не удовлетворяет моим потребностям во время прокрутки представления корзины.

Заранее спасибо: -)

1 Ответ

0 голосов
/ 07 мая 2018

Я много искал и обнаружил, что вместо использования recyclerViewInstance.findViewHolderForAdapterPosition(vHID - 1);

Я могу найти видоискатель любой позиции, сохраняя видоискатели в списке <>, как

List<ViewHolder> vList = new ArrayList<>();

и всякий раз, когда я хочу, чтобы пользователь мог видеть любую возможность, чем я могу найти

int vHID = viewHolder.getAdapterPosition();
viewHolderRec = vList.get(vHID - 1);

Как то, что мне нужно сделать.

Но я знаю, что это влияет на большое количество памяти, когда список очень большой. Поэтому я удалил из памяти видоискатели, которые сейчас не видны.

Для этого я получаю высоту в пикселях дисплея (dp) и получаю количество видимых элементов по ней. и удалите все остальные видоискатели.

Этот трюк работает для меня. Может быть, это будет полезно для кого-то, поэтому я публикую этот ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...