listview не должен быть нулевым - PullRequest
0 голосов
/ 01 февраля 2020

Я новичок в программировании. У меня появляется сообщение об ошибке при запуске приложения, и я не знаю, что делать с кодом. Может кто-нибудь помочь мне, пожалуйста.

Вот мой код:

Активность:

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)


        val items = ArrayList<String>()
        items.add("Test1")
        items.add("Test2")
        items.add("Test3")

        listview1.adapter = Adapter1(this, items)

        val transaction1 = supportFragmentManager.beginTransaction()
        fragment1Button1.setOnClickListener{

            transaction1.replace(R.id.fragment1Platz,Fragment1())
            transaction1.commit()
        }

    }
}

Фрагмент:

class Fragment1 : Fragment() {


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {

        return inflater.inflate(R.layout.fragment_fragment1, container, false)
    }


}

Адаптер:

class Adapter1 (context : Context, items : ArrayList<String>) : BaseAdapter() {


    private val context: Context = context
    private val items: ArrayList<String> = items


    override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {

        val listeneintrag = LayoutInflater.from(context).inflate(R.layout.adapter1_layout,parent, false)

        listeneintrag.findViewById<TextView>(R.id.adapter_textfeld1).text = items.get(position)

        return listeneintrag
    }

    override fun getItem(position: Int): String {
        return items.get(position)
    }

    override fun getItemId(position: Int): Long {
        return position.toLong()
    }

    override fun getCount(): Int {
        return items.size
    }
}

Ошибка трассировки стека:

2020-02-01 13:37 : 17,972 10729-10729 /? E / AndroidRuntime: ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основной Процесс: strauss2002.yannick.fragmentetest, PID: 10729 java .lang.RuntimeException: Невозможно запустить действие ComponentInfo {strauss2002.yannick.fragmentetest / strauss2002.yannick.fragmentetest.MainActivity} * * .lang.IllegalStateException: listview1 не должен иметь значение null в android .app.ActivityThread.performLaunchActivity (ActivityThread. java: 2778) в android .app.ActivityThread.handleLaunchActivity (ActivityThread. java: 2856) в android .app.ActivityThread.-wrap11 (Неизвестный источник: 0) в android .app.ActivityThread $ H.handleMessage (ActivityThread. java: 1589) в android .os.Handler.dispatchMessage (Обработчик. java: 106) в android .os.Looper.l oop (Looper. java: 164) в android .app.ActivityThread.main (ActivityThread. java: 6494) в java .lang.reflect.Method.invoke (собственный метод) в com. android .internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit. java: 438) в com. android .internal.os.ZygoteInit .main (ZygoteInit. java: 807) Причина: java .lang.IllegalStateEx ception: listview1 не должен быть нулевым в strauss2002.yannick.fragmentetest.MainActivity.onCreate (MainActivity.kt: 29) в android .app.Activity.performCreate (Activity. java: 7009) в android .app. Activity.performCreate (Activity. java: 7000) в android .app.Instrumentation.callActivityOnCreate (Instrumentation. java: 1214) в android .app.ActivityThread.performLaunchActivity (ActivityThread. java: 2731) в android .app.ActivityThread.handleLaunchActivity (ActivityThread. java: 2856) в android .app.ActivityThread.-wrap11 (неизвестный источник: 0) в android .app.ActivityThread $ H.handleMessage (ActivityThread . java: 1589) в android .os.Handler.dispatchMessage (Обработчик. java: 106) в android .os.Looper.l oop (Looper. java: 164) в android .app.ActivityThread.main (ActivityThread. java: 6494) в java .lang.reflect.Method.invoke (собственный метод) в com. android .internal.os.RuntimeInit $ MethodAndArgsCaller.run ( RuntimeInit. java: 438) на ком. android .internal.os.ZygoteInit.main (ZygoteInit. java: 807)

Вот мое обновление Основная активность:

class MainActivity: AppCompatActivity () {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val listview1=findViewById<ListView>(R.id.listview1)

    val items = ArrayList<String>()
    items.add("Test1")
    items.add("Test2")
    items.add("Test3")

    listview1.adapter = Adapter1(this, items)

    val transaction1 = supportFragmentManager.beginTransaction()
    fragment1Button1.setOnClickListener{

        transaction1.replace(R.id.fragment1Platz,Fragment1())
        transaction1.commit()
    }

}

}

А вот новое сообщение об ошибке: 2020-02-02 11:15: 15.935 12764-12764 / strauss2002.yannick.fragmentetest E / AndroidRuntime: ОСНОВНОЕ ИСКЛЮЧЕНИЕ: основной Процесс: straus s2002.yannick.fragmentetest, PID: 12764 java .lang.RuntimeException: Невозможно запустить действие ComponentInfo {strauss2002.yannick /ragmentest strauss2002.yannick.fragmentetest.MainActivity}: java .lang.IllegalStateException: listview1 не должен иметь значение null в android .app.ActivityThread.performLaunchActivity (ActivityThread. java: 2778) в android .app.ActivityThread. handleLaunchActivity (ActivityThread. java: 2856) в android .app.ActivityThread.-wrap11 (неизвестный источник: 0) в android .app.ActivityThread $ H.handleMessage (ActivityThread. java: 1589) в android .os.Handler.dispatchMessage (Обработчик. java: 106) в android .os.Looper.l oop (Looper. java: 164) в android .app.ActivityThread.main ( ActivityThread. java: 6494) в java .lang.reflect.Met hod.invoke (собственный метод) в com. android .internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit. java: 438) в com. android .internal.os.ZygoteInit.main (ZygoteInit. java: 807) Причина: java .lang.IllegalStateException: listview1 не должен быть нулевым в strauss2002.yannick.fragmentetest.MainActivity.onCreate (MainActivity.kt: 28) в android .app.Activity.performCreate (Activity . java: 7009) в android .app.Activity.performCreate (Activity. java: 7000) в android .app.Instrumentation.callActivityOnCreate (Instrumentation. java: 1214) в android .app.ActivityThread.performLaunchActivity (ActivityThread . java: 2731) в android .app.ActivityThread.handleLaunchActivity (ActivityThread. java: 2856) в android .app.ActivityThread.-wrap11 (Неизвестный источник: 0) в android .app. ActivityThread $ H.handleMessage (ActivityThread. java: 1589) в android .os.Handler.dispatchMessage (Обработчик. java: 106) в android .os.Looper.l oop (Looper. java: 164) в android .app.ActivityThread.main (ActivityThread. java: 6494) в java .lang.reflect.Method.invoke (собственный метод) в com. android .internal.os .RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit. java: 438) в com. android .internal.os.ZygoteInit.main (ZygoteInit. java: 807)

Вот xml из Activity_main:

<?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"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<FrameLayout
    android:id="@+id/fragment1Platz"
    android:layout_width="410dp"
    android:layout_height="495dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toStartOf="parent">

</FrameLayout>

  <Button
    android:id="@+id/fragment1Button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="60dp"
    android:text="Öffne Fragment 1"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.529"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />
  </androidx.constraintlayout.widget.ConstraintLayout>

Вот xml фрагмента_фрагмента1:

 <?xml version="1.0" encoding="utf-8"?>
 <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="match_parent"
 tools:context=".Fragment1">

 <!-- TODO: Update blank fragment layout -->

 <ListView
    android:id="@+id/listview1"
    android:layout_width="match_parent"
    android:layout_height="322dp"/>

 </FrameLayout>

Вот xml адаптера1_layout:

 <?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"
 xmlns:tools="http://schemas.android.com/tools"
 android:id="@+id/frameLayout"
 android:layout_width="match_parent"
 android:layout_height="match_parent">

 <TextView
    android:id="@+id/adapter_textfeld1"
    android:layout_width="137dp"
    android:layout_height="53dp"
    android:layout_marginTop="128dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />
 </androidx.constraintlayout.widget.ConstraintLayout>

1 Ответ

1 голос
/ 01 февраля 2020

Потому что вы не звонили findViewById для listview1. Добавьте listview1=findViewById(R.id.yourListViewIdInXml); сразу после setContentView метода oncreate

Или, если вы используете kotlin syntheti c, убедитесь, что listview1 находится в activity_main.xml файле

Обновление

Проблема сохраняется, поскольку вы звоните findViewById с идентификатором (listview1), который недоступен в activity_main.xml. Обратите внимание, что в случае действий, когда вы вызываете findViewById, он ищет id в файле макета, который передается в методе setContentView, то есть activity_main.xml в вашем случае. Поэтому, когда вы вызываете findViewById<ListView>(R.id.listview1), он ищет listview1 в activity_main. xml, но, как мы знаем, нет представления, доступного в activity_main. xml, который имеет id = listview1, поэтому findViewById просто возвращает ноль, и именно поэтому вы получаете эта ошибка. Таким образом, чтобы избавиться от этого исключения, измените:

val listview1=findViewById<ListView>(R.id.listview1)

на это:

val listview1=findViewById<ListView>(R.id.kontaktliste)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...