Androidx RecyclerView GridLayoutManager не может быть преобразован в LayoutManager

Я создаю RecyclerView с сеткой, используя GridLayoutManager. Все выглядит нормально, пока я не попытаюсь установить макет в RecyclerView. Я использовал этот код / ​​файлы макета раньше, поэтому я знаю, что он работает, однако после перехода на Androidx у меня внезапно возникли проблемы.

Код (в действии):

RecyclerView recyclerView = findViewById(R.id.rv_checks);
    recyclerView.setHasFixedSize(true);
    recyclerView.setNestedScrollingEnabled(false);
    recyclerView.setFocusable(false);

    GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3);
    recyclerView.setLayoutManager(gridLayoutManager);

RecyclerView:

<androidx.recyclerview.widget.RecyclerView
    android:id = "@+id/rv_checks"
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    android:layout_below = "@id/action_container"
    android:layout_marginTop = "5dp"
    android:clipToPadding = "false"
    android:padding = "20dp"/>

build.gradle:

android {
compileSdkVersion 28
defaultConfig {
    applicationId "com.example.app"
    minSdkVersion 21
    targetSdkVersion 28
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.0.0-beta01'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.2'

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.0-alpha4'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4'

    implementation 'androidx.recyclerview:recyclerview:1.0.0'

}
apply plugin: 'com.google.gms.google-services'

Ошибка:

error: incompatible types: GridLayoutManager cannot be converted to LayoutManager

Какой импорт у вас есть для LayoutManager?

ianhanniballake 03.03.2019 00:58
1
1
2 717
2

Ответы 2

Если ваша миграция на AndroidX пытается использовать this. https://developer.android.com/reference/androidx/leanback/widget/VerticalGridView.html

Это похоже на новый вид переработчика для androidX

Leanback-зависимости предназначены для приложений на устройствах Android TV.

issamux 21.02.2021 14:42

Я только что исправил эту проблему, проблема в этом случае заключалась в том, как объявлялся GridLayoutManager (решение ниже). Однако это не было постоянным исправлением, поскольку проблема была связана с переходом на AndroidX. Решение для исправления этих проблем можно найти в здесь, что может (как это было в моем случае) вызвать конфликт библиотек, который можно исправить, как это.

Код (в действии):

RecyclerView recyclerView = findViewById(R.id.rv_checks);
    recyclerView.setHasFixedSize(true);
    recyclerView.setNestedScrollingEnabled(false);
    recyclerView.setFocusable(false);

    GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3);
    recyclerView.setLayoutManager(gridLayoutManager);

Временное решение:

androidx.recyclerview.widget.GridLayoutManager gridLayout = new androidx.recyclerview.widget.GridLayoutManager(this, 3);

gradle.properties:

android.useAndroidX=true
android.enableJetifier=true

Другие вопросы по теме