Intereting Posts
Как получить текущую временную метку сервера Firebase за миллисекунды? Circle CI Automated for Android Project не смог создать файл APK и не был установлен в устройство Альтернатива для onResume () при переключении фрагментов Просмотр прокрутки для текста в андроиде Android Studio показывает диалог «не удалось создать мост отладки: не удалось запустить сервер adb: невозможно получить результат« adb version »» Как добавить слушателя для флажков в виде адаптера, Android, ArrayAdapter, onCheckedChanged, OnCheckedChangeListener Как я могу импортировать файл .apk загруженного файла в Eclipse? У нас есть этот вариант? Как использовать PendingIntent для связи из Сервиса с клиентом / Activity? Как показать изображение в теле письма? андроид убить задачу RecyclerView autofit LayoutManager Как получить имя пользователя Twitter с помощью Twitter 4j Android Gallery View Прокрутка проблемы, когда onClickListener для данных Невозможно запустить новый Intent с помощью setClassName с другим пакетом в Android Скрытие клавиатуры с помощью кнопки BACK

RecyclerView.getChild (index) показывает null, когда список прокручивается (индекс перепутался)

Я использую SwipeableRecyclerView для моего приложения Android для включения swipes для моего recyclerView. RecyclerView содержит список карт.

Я пытался реализовать функции отмены для карт, которые будут удалены при прокрутке влево (первый разворачивание показывает отмену, триггеры последующих салфеток удаляют)

Я пытаюсь использовать следующий код (частично работающий, я думаю)

SwipeableRecyclerViewTouchListener srvTouchListner = new SwipeableRecyclerViewTouchListener(rvTimerList, new SwipeableRecyclerViewTouchListener.SwipeListener(){ @Override public boolean canSwipe(int i) { return true; } @Override public void onDismissedBySwipeLeft(RecyclerView recyclerView, int[] ints) { for(int position : ints){ View view = recyclerView.getChildAt(position); if (view.getTag(R.string.card_undo) == null) { if(viewStack == null) { saveToViewStack(position, view); final ViewGroup viewGroup = (ViewGroup) view.findViewById(R.id.time_card2); view.setTag(R.string.card_undo, "true"); viewGroup.addView(view.inflate(TimerSummary.this, R.layout.timeslot_card_undo, null)); } } else { Log.d(TAG, "Removing Item"); deleteTimeSlot(timerInstanceList.get(position)); Toast.makeText(TimerSummary.this, "Deleted!", Toast.LENGTH_SHORT).show(); timerInstanceList.remove(position); finalSummaryAdapter.notifyItemRemoved(position); } } finalSummaryAdapter.notifyDataSetChanged(); } @Override public void onDismissedBySwipeRight(RecyclerView recyclerView, int[] ints) { for (int position:ints){ View view = recyclerView.getChildAt(position); if(view.getTag(R.string.card_undo) != null && view.getTag(R.string.card_undo).equals("true")){ viewStack = null; recyclerView.setAdapter(finalSummaryAdapter); } } } }); 

Когда элементы больше (требуется прокрутка)

 View view = recyclerView.getChildAt(position); 

Возвращает нулевую ссылку, которая приводит к сбою приложения.

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

Если кто-то может поделиться всем, что помогает, это будет здорово! Я буду рад предоставить любую информацию, если кто-то захочет этого,

Solutions Collecting From Web of "RecyclerView.getChild (index) показывает null, когда список прокручивается (индекс перепутался)"

Вы должны использовать findViewHolderForAdapterPosition . https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html#findViewHolderForAdapterPosition(int)

Имейте в виду, что он вернет null, если позиция не выложена (например, вне границ или удалена).

Поскольку у меня недостаточно очков репутации, чтобы прокомментировать ответ @ yigit, я подумал, что я дам способ получить все viewHolders из RecyclerView, независимо от того, что сейчас находится в группе viewGroup. Даже с помощью findViewHolderForAdapterPosition и ForLayoutPosition мы все равно можем получить нулевой экземпляр ViewHolder в RecyclerView.

Чтобы обойти это, мы можем использовать findViewHolderForItemId [ 1 ] и передать идентификатор viewHolder в адаптер с помощью RecyclerView.Adapter # getItemId (int position) [ 2 ]

 for (int i = 0; i < mAdapter.getItemCount(); i++) { RecyclerView.ViewHolder holder = mRecyclerView.findViewHolderForItemId(mAdapter.getItemId(i)); } 
  1. https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html#findViewHolderForItemId(int)
  2. https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter.html#getItemId(int)

Используйте методы findFirstCompletelyVisibleItemPosition () & findLastVisibleItemPosition () в LayoutManager вашего RecyclerView, чтобы узнать, что ребенок, которого вы ищете, виден или нет. Если это видно, вы можете использовать getChild (index), чтобы получить экземпляр ViewHolder этого конкретного ребенка, и он не будет пустым, иначе он может быть пустым (если в нем нет ребенка). Если ваш ребенок не виден, вы просто вносите изменения в свою конкретную позицию. Объект списка, в следующий раз, когда он будет виден, будет обновлен интерфейс.

 if (selectedPosition >= linearLayoutManager.findFirstVisibleItemPosition() && selectedPosition <= linearLayoutManager.findLastVisibleItemPosition()){ linearLayoutManager.getChildAt(selectedPosition).setBackgroundResource(0); }