RemoveView не поддерживается в AdapterView на устройствах Android 9 - PullRequest
0 голосов
/ 30 января 2020

Мое приложение работает нормально на каждом Android 8 устройстве, но падает на устройствах с Android 9.

Я пытаюсь обновить его, но получаю следующее:

java.lang.UnsupportedOperationException: removeView(View) is not supported in AdapterView
        at android.widget.AdapterView.removeView(AdapterView.java:947)
        at android.view.ViewOverlay$OverlayViewGroup.add(ViewOverlay.java:195)
        at android.view.ViewGroupOverlay.add(ViewGroupOverlay.java:72)
        at android.transition.TransitionUtils.createViewBitmap(TransitionUtils.java:171)
        at android.transition.TransitionUtils.copyViewImage(TransitionUtils.java:103)
        at android.transition.Visibility.onDisappear(Visibility.java:383)
        at android.transition.Visibility.createAnimator(Visibility.java:252)
        at android.transition.Transition.createAnimators(Transition.java:732)
        at android.transition.TransitionSet.createAnimators(TransitionSet.java:396)
        at android.transition.Transition.playTransition(Transition.java:1779)
        at android.transition.TransitionManager$MultiListener.onPreDraw(TransitionManager.java:315)
        at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:991)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3024)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1897)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8514)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
        at android.view.Choreographer.doCallbacks(Choreographer.java:761)
        at android.view.Choreographer.doFrame(Choreographer.java:696)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7063)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)

Я НЕ ИСПОЛЬЗУЮ НИКАКУЮ ФУНКЦИЮ «removeView» в моем коде, она только в библиотеке. Мой файл Gradle выглядит следующим образом:

apply plugin: 'com.android.application'

android {
    lintOptions {
        checkReleaseBuilds false
        // Or, if you prefer, you can continue to check for errors in release builds,
        // but continue the build even when errors are found:
        abortOnError false
    }
    compileSdkVersion 28
    buildToolsVersion '28.0.3'
    defaultConfig {
        applicationId "fooooo"
        minSdkVersion 25
        targetSdkVersion 28
        compileSdkVersion 28
        versionCode 14
        versionName "1.0.5"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        vectorDrawables.useSupportLibrary = true
    }
    ......
dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    implementation project(':FOOLibrary')
    implementation files('libs/ormlite-core-5.0.jar')
    implementation files('libs/ormlite-android-5.0.jar')
    implementation files('libs/ormlite-android-5.0-javadoc.jar')
    implementation 'com.google.android.gms:play-services-vision:11.0.4'
    implementation 'com.google.android.gms:play-services-location:11.0.4'
    implementation 'com.android.support:appcompat-v7:25.3.1'
    implementation 'com.android.support:cardview-v7:28.0.0-alpha3'
    implementation 'com.android.support:recyclerview-v7:28.0.0-alpha3'
    implementation 'com.android.support:design:27.1.0'
    implementation 'com.android.support:support-v4:28.0.0'
    implementation 'com.google.code.gson:gson:2.7'
    implementation 'com.squareup.retrofit2:retrofit:2.3.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.0-alpha7'
    implementation 'uk.co.chrisjenx:calligraphy:2.3.0'
    testImplementation 'junit:junit:4.12'
}

Я пытаюсь изменить версии библиотек, но все, кажется, работает. В документации Android я обнаружил, что функция removeView нормально получает это исключение, но я не могу его переопределить.

Я могу показать вам код из фрагмента и используемого мной адаптера, но внутри них нет removeView.

Кто-нибудь может помочь?

1 Ответ

0 голосов
/ 04 февраля 2020

Наконец я получил ответ. Проблема была в управлении фрагментами. Я использовал это:

fragmentManager.beginTransaction().replace(R.id.main_container,fragment).commit();

вместо:

fragmentManager.beginTransaction().add(R.id.main_fl_container,fragment).commit();

Я не уверен, что из-за изменения поведения это не работает с Android 8 до Android 9, но сейчас это работает. Извините, если раньше я не показывал эти строки, но в исключении не указывалось ни одной строки кода, и мне пришлось самому это выяснить.

...