java.lang.NullPointerException: Fehlende erforderliche Ansicht mit ID:

11

Android Studio 3.6

in app / build.gradle:

android {
viewBinding.enabled = true

Hier meine XML:

<?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">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/bluetoothBottonMainContainer"
        android:layout_width="0dp"
        android:layout_height="104dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <View
            android:id="@+id/viewPointNotSelect"
            android:layout_width="16dp"
            android:layout_height="16dp"
            android:background="@drawable/circle_transparent"
            app:layout_constraintBottom_toBottomOf="@+id/separator"
            app:layout_constraintEnd_toStartOf="@+id/separator"
app:layout_constraintTop_toTopOf="parent" />

und eine andere XML die Unclude prev. xml:

 <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/bottonContainer"
        android:layout_width="0dp"
        android:layout_height="104dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent">

        <include
            android:id="@+id/qrBottonContainer"
            layout="@layout/qr_bottom_container"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent" />

hier meine Tätigkeit:

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = QrBluetoothSwipeActivityBinding.inflate(layoutInflater)
        setContentView(binding.root)
}

Die App wird erstellt und ausgeführt. Nett.

Jetzt bewege ich mich id - android:id="@+id/bluetoothBottonMainContainer"

zum äußeren Behälter wie folgt:

<?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:id="@+id/bluetoothBottonMainContainer"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="0dp"
        android:layout_height="104dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <View
            android:id="@+id/viewPointNotSelect"
            android:layout_width="16dp"
            android:layout_height="16dp"
            android:background="@drawable/circle_transparent"
            app:layout_constraintBottom_toBottomOf="@+id/separator"
            app:layout_constraintEnd_toStartOf="@+id/separator"
            app:layout_constraintTop_toTopOf="parent" />

App wird erstellt, aber beim Ausführen wird in dieser Zeile ein Laufzeitfehler angezeigt:

binding = QrBluetoothSwipeActivityBinding.inflate(layoutInflater)

Error:

10-25 11:11:51.290 E/AndroidRuntime(14128): FATAL EXCEPTION: main
10-25 11:11:51.290 E/AndroidRuntime(14128): Process: com.myproject.debug, PID: 14128
10-25 11:11:51.290 E/AndroidRuntime(14128): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myproject.debug/com.myproject.ui.actviity.QRBluetoothSwipeActivity}: java.lang.NullPointerException: Missing required view with ID: bluetoothBottonMainContainer
10-25 11:11:51.290 E/AndroidRuntime(14128):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
10-25 11:11:51.290 E/AndroidRuntime(14128):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
10-25 11:11:51.290 E/AndroidRuntime(14128):     at android.app.ActivityThread.-wrap11(ActivityThread.java)
10-25 11:11:51.290 E/AndroidRuntime(14128):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
10-25 11:11:51.290 E/AndroidRuntime(14128):     at android.os.Handler.dispatchMessage(Handler.java:102)
10-25 11:11:51.290 E/AndroidRuntime(14128):     at android.os.Looper.loop(Looper.java:148)
10-25 11:11:51.290 E/AndroidRuntime(14128):     at android.app.ActivityThread.main(ActivityThread.java:5417)
10-25 11:11:51.290 E/AndroidRuntime(14128):     at java.lang.reflect.Method.invoke(Native Method)
10-25 11:11:51.290 E/AndroidRuntime(14128):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
10-25 11:11:51.290 E/AndroidRuntime(14128):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
10-25 11:11:51.290 E/AndroidRuntime(14128): Caused by: java.lang.NullPointerException: Missing required view with ID: bluetoothBottonMainContainer
10-25 11:11:51.290 E/AndroidRuntime(14128):     at com.myproject.databinding.BluetoothBottomContainerBinding.bind(BluetoothBottomContainerBinding.java:114)
10-25 11:11:51.290 E/AndroidRuntime(14128):     at com.myproject.databinding.QrBluetoothSwipeActivityBinding.bind(QrBluetoothSwipeActivityBinding.java:76)
10-25 11:11:51.290 E/AndroidRuntime(14128):     at com.myproject.databinding.QrBluetoothSwipeActivityBinding.inflate(QrBluetoothSwipeActivityBinding.java:62)
10-25 11:11:51.290 E/AndroidRuntime(14128):     at com.myproject.databinding.QrBluetoothSwipeActivityBinding.inflate(QrBluetoothSwipeActivityBinding.java:52)
10-25 11:11:51.290 E/AndroidRuntime(14128):     at com.myproject.ui.actviity.QRBluetoothSwipeActivity.onCreate(QRBluetoothSwipeActivity.kt:31)
10-25 11:11:51.290 E/AndroidRuntime(14128):     at android.app.Activity.performCreate(Activity.java:6251)
10-25 11:11:51.290 E/AndroidRuntime(14128):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
10-25 11:11:51.290 E/AndroidRuntime(14128):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
10-25 11:11:51.290 E/AndroidRuntime(14128):     ... 9 more
10-25 11:11:51.291 W/ActivityManager(  780):   Force finishing activity com.myproject.debug/com.myproject.ui.actviity.QRBluetoothSwipeActivity
10-25 11:11:51.307 I/Icing   (11529): Indexing done com.google.android.gms-apps
a_subscriber
quelle
3
Das Umbenennen der ID der Ansicht, die eine NPE produzierte, hat für mich funktioniert. Ging von drawerLayout zu drawerLayout_main und dies löste mein Problem.
11m0

Antworten:

9

Ich bin auf dieses Problem gestoßen, aber in meinem Fall ist das Problem die includeFlagge. Die Problemumgehung, die ich gefunden habe, besteht darin, die Ansichts-ID mit der ID der Stammansicht des enthaltenen Layouts identisch zu machen.

activity_layout.xml

<LinearLayout>
    <include android:id="@+id/widget1" layout="@layout/my_widget" />
</LinearLayout>

my_wideget.xml

<LinearLayout
    android:id="@+id/widget1">
</LinearLayout>
Arst
quelle
Das hat funktioniert und das ist verrückt.
Mittwoch,
Ich kann nicht glauben, dass es tatsächlich funktioniert hat.
NepaliDeveloper
Ich stimme zu, das ist dumm. Meine Lösung bestand darin, die ID für das Include-Tag beizubehalten und die ID der obersten Ebene des ConstraintLayout in der Layoutreferenz für das Include-Tag zu entfernen.
cking24343
Ich kann nicht glauben, dass das Setzen des gleichen Namens tatsächlich für mich funktioniert.
Jenish
8

Aktualisieren

Dies sollte in den neuesten Beta-Versionen von Android Studio behoben werden

Dennoch gibt es ein Problem , wenn Ansicht Bindung mit Material Registerkarte Layout Registerkarte Elemente mit dem berichtet wird , hier und haben noch nicht festgelegt.


Dies ist ein Fehler in ViewBinding, der im Issue-Tracker an folgenden Stellen gemeldet wird.

user158
quelle
4
Status behoben? Natürlich nicht. Ich habe immer noch dieses Problem.
Paradoxy
@Paradoxy es sollte jetzt funktionieren, aktualisieren Sie Ihr Android Studio auf die neueste Version, da Viewbinding von Build-Tools in Android Studio kommt
Benutzer158
2
Ich benutze Android Studio 3.6 vom 02.12.2020 und dennoch ist das Problem bei einigen meiner Aktivitäten nicht verschwunden. Ich habe ein lineares Layout, dessen untergeordnete Elemente tabLayout, viewPager usw. sind. Mein tabLayout selbst enthält 3 Registerkartenelemente. Ich erhalte die fehlende erforderliche Ansicht mit der ID für Registerkartenelemente. Wenn ich ihre ID entferne, verschwindet dieser Fehler. Ich verwende einfache IDs wie @ id / tabitem usw. Diese Aktivität verfügt auch über ein Schubladenlayout mit Navigation. Durch die Verwendung von viewbinding verschwindet das Umschalten, obwohl ich .setDisplayHomeAsUpEnabled (true) aufrufe. Am Ende habe ich die folgenden Tools hinzugefügt: viewBindingIgnore = "true" und diese gute alte findviewbyid verwendet.
Paradoxy
1
@Paradoxy Ich war auch mit diesem Problem konfrontiert, es wird bereits berichtet, was nicht behoben ist.
user158
1
Der Fehler trat nach wie vor mir, bei der Verwendung von <merge>Layout für dynamisch hinzugefügt Ansicht, zB: parent_layout.xml-> addView für parent_layout.xmlKind mit MyMergeLayoutBinding.inflate(inflater, viewGroup, false)-> my_merge_layout.xmlverwendet <merge>als übergeordnetem Tag
mochadwi
1

Ich treffe den gleichen Fehler. Sie können eine Wrapper-Ansicht in Ihren "äußeren Container" einfügen, um diesen Fehler zu vermeiden.

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 
    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">
    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/bluetoothBottonMainContainer"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="0dp"
        android:layout_height="104dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <View
            android:id="@+id/viewPointNotSelect"
            android:layout_width="16dp"
            android:layout_height="16dp"
            android:background="@drawable/circle_transparent"
            app:layout_constraintBottom_toBottomOf="@+id/separator"
            app:layout_constraintEnd_toStartOf="@+id/separator"
            app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

ZX C.
quelle
Es sieht nach einer
Problemumgehung aus
0

Bitte überprüfen Sie, ob Sie möglicherweise dieselben Layoutdateien in verschiedenen Modulen haben.

Maxim Firsoff
quelle
0

In meinem Fall ich die ID im enthaltenen Layout entfernt und es funktioniert ordnungsgemäß!

main.xml

    <RelativeLayout>   
    ....
    <include
        include="@layout/included_layout"   
        android:id="@+id/view_included_layout"/>
    </RelativeLayout>

include_layout.xml

`   <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/top_level_layout">  <!-- Remove this id -->    
        ....
    </LinearLayout>
`

Meine Android Studio-Version ist 3.6.2 und die Version von build.gradle ist 3.6.1

adi
quelle