java.lang.UnsupportedOperationException: RecyclerView не поддерживает прокрутку к абсолютной позиции

Используйте regex для удаления форматирования (доллар и запятую) и используйте parseFloat для преобразования строки в число с плавающей запятой. `

var currency = "$1,100.00";
currency.replace(/[$,]+/g,"");
var result = parseFloat(currency) + .05;
23
задан Selvin 10 February 2015 в 09:46
поделиться

4 ответа

Вы получите эту ошибку на некоторых Samsung, Sony, ... Внедрение ICS. Оба, которые я основал, включают в себя странные внутренние представления управления. Одним из решений этого является расширение RecyclerView (или класса, который генерирует проблему) с вашим собственным классом и использование этого. В этом классе вы будете «съедать» все возможные исключения для этих устройств. Это уродливо, это ужасно, но это все, что я могу сделать, чтобы решить такие проблемы.

Для вашей конкретной проблемы с scrollTo ....

package com.stackoverflow.customviews;

public class CustomRecyclerView extends RecyclerView{

  private static final String TAG = "CustomRecyclerView";

  public CustomRecyclerView(android.content.Context context) {
    super(context);
  }

  public CustomRecyclerView(android.content.Context context, android.util.AttributeSet attrs) {
      super(context, attrs);
  }

  public CustomRecyclerView(android.content.Context context, android.util.AttributeSet attrs, int defStyle) {
      super(context, attrs, defStyle);
  }

  @Override
  public void scrollTo(int x, int y) {
      Log.e(TAG, "CustomRecyclerView does not support scrolling to an absolute position.");
     // Either don't call super here or call just for some phones, or try catch it. From default implementation we have removed the Runtime Exception trown 
  }
}

Затем вы можете заменить в своем макете XML этот новый класс:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="wrap_content">

<com.stackoverflow.customviews.CustomRecyclerView
    android:id="@+id/my_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:overScrollMode="never"
    android:scrollbars="vertical" />

</FrameLayout>
23
ответ дан cohnen 10 February 2015 в 09:46
поделиться

Для программной прокрутки необходимо использовать LayoutManager. Например, LinearLayoutManager имеет scrollToPositionWithOffset. GridLayoutManager расширяет LinearLayoutManager - так что вы также можете использовать это. У меня работает код:

RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
if (layoutManager instanceof LinearLayoutManager) {
   LinearLayoutManager linearLayoutManager = (LinearLayoutManager) layoutManager;
   linearLayoutManager.scrollToPositionWithOffset(0, newTopMargin - defaultMargin);
}
14
ответ дан Vova K. 10 February 2015 в 09:46
поделиться

У меня возникла та же проблема с предупреждением из-за следующего в родительском объекте утилизатора:

android:animateLayoutChanges="true"

Если вы хотите сохранить анимацию, просто поместите утилизатор в другого родителя, как framelayout. У меня это работало нормально, и анимация тоже играет хорошо.

4
ответ дан Willem van Ketwich 10 February 2015 в 09:46
поделиться

Как другие сказали в их ответах android:animateLayoutChanges="true" в RecyclerView родительская причина расположения эта проблема, но решение легче, чем другие сказали.

Просто необходимо поместить Ваш RecyclerView в новое Layout, который не имеет android:animateLayoutChanges свойство.

, Например:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:animateLayoutChanges="true">

    ...

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintTop_toTopOf="parent">

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/recycler_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>
2
ответ дан 28 November 2019 в 17:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: