java.lang.NullPointerException: Tampilan yang diperlukan tidak ada dengan ID:

11

Android Studio 3.6

di app / build.gradle:

android {
viewBinding.enabled = true

Di sini xml saya:

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

dan xml lain yang belum termasuk berlaku. 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" />

di sini aktivitas saya:

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

aplikasi ini dibangun dan dijalankan. Bagus.

Sekarang saya pindah id - android:id="@+id/bluetoothBottonMainContainer"

untuk wadah luar seperti ini:

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

aplikasi dibangun, tetapi ketika dijalankan saya mendapatkan kesalahan runtime di baris ini:

binding = QrBluetoothSwipeActivityBinding.inflate(layoutInflater)

kesalahan:

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
sumber
3
Mengganti nama id dari pandangan yang menghasilkan NPE bekerja untuk saya. Pergi dari drawerLayout ke drawerLayout_main dan ini menyelesaikan masalah saya.
11m0

Jawaban:

9

Saya mengalami masalah ini tetapi dalam kasus saya masalahnya adalah includebendera. Solusi yang saya temukan adalah untuk membuat id tampilan sama dengan id dari tampilan root tata letak yang disertakan.

activity_layout.xml

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

my_wideget.xml

<LinearLayout
    android:id="@+id/widget1">
</LinearLayout>
Arst
sumber
Ini berhasil dan itu gila.
Wryday
Tidak percaya itu benar-benar berhasil.
NepaliDeveloper
Saya setuju, ini bodoh. Solusi saya adalah menjaga id untuk menyertakan tag dan menghapus id tingkat atas dari constraintLayout dalam referensi tata letak untuk menyertakan tag.
cking24343
Tidak percaya bahwa menetapkan nama yang sama akan berhasil untuk saya.
Jenish
8

Memperbarui

Ini harus diperbaiki dalam versi Beta, Carnary Android Studio terbaru

Masih ada masalah saat menggunakan View Binding dengan item tab layout tab material yang dilaporkan di sini dan belum diperbaiki.


Ini adalah bug di ViewBinding yang dilaporkan dalam pelacak masalah di tempat-tempat berikut.

pengguna158
sumber
4
Status sudah diperbaiki? Tentu saja tidak. Saya masih memiliki masalah ini.
Paradoksi
@Paradoxy seharusnya berfungsi sekarang, tingkatkan studio Android Anda ke versi terbaru, karena viewbinding datang dari alat build di Android Studio
user158
2
Saya menggunakan android studio 3.6 dari 12/2/2020 namun masalahnya tidak hilang untuk beberapa kegiatan saya. Saya memiliki linearLayout, yang memiliki tabLayout, viewPager, dll. TabLayout saya sendiri memiliki 3 item tab. Saya mendapatkan tampilan yang diperlukan Hilang dengan ID untuk item tab. Ketika saya menghapus id mereka, kesalahan ini hilang. Saya menggunakan id sederhana seperti @ id / tabitem, dll. Kegiatan ini juga memiliki drawerlayout dengan navigasi. Dengan menggunakan viewbinding, toggle-nya menghilang meskipun saya memanggil .setDisplayHomeAsUpEnabled (true). Pada akhirnya saya menambahkan alat: viewBindingIgnore = "true" dan menggunakan findviewbyid lama yang bagus itu.
Paradoksi
1
@ Paradoksi Saya juga menghadapi masalah ini, sudah dilaporkan yang tidak diperbaiki.
user158
1
Kesalahan masih terjadi pada saya, ketika menggunakan <merge>tata letak untuk tampilan yang ditambahkan secara dinamis, misalnya: parent_layout.xml-> addView untuk parent_layout.xmlanak yang menggunakan MyMergeLayoutBinding.inflate(inflater, viewGroup, false)-> my_merge_layout.xmldigunakan <merge>sebagai tag induk
mochadwi
1

Saya bertemu bug yang sama. Anda dapat menambahkan tampilan pembungkus di "wadah luar" Anda untuk menghindari bug ini.

<?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
sumber
Ini terlihat seperti solusi
a_subscriber
0

Silakan periksa, mungkin Anda memiliki file tata letak yang sama di modul yang berbeda.

Maxim Firsoff
sumber
0

Dalam kasus saya, saya menghapus id di dalam tata letak yang disertakan dan berfungsi dengan baik!

main.xml

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

Included_layout.xml

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

Versi Android Studio saya adalah 3.6.2 dan versi build.gradle 3.6.1

adi
sumber