当前位置: 首页 > 知识库问答 >
问题:

listview不能为null

晏经武
2023-03-14

我是编程初学者。当我启动我的应用程序时,我有一条错误消息,不知道如何处理代码。有人能帮我吗?

这是我的代码:

活动:

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: FATAL EXCEPTION: main Process:hread.main, PID: 10729hread.java:6494RuntimeException:无法启动活动ComponentInfo{strauss2002.yannick.fragmentetest/strauss2002.yannick.fragmentetest.MainActivity}:java.lang.IllegalStateException: listview1com.android.internal.os.ActivityTaller.runLaunchActive(ActivityTnit.java:438)atcom.android.internal.os.ActivityTnit.mainLaunchActive(ActivityTnit.java:807)atjava.lang.ActivityThread.-wrap11(未知来源: 0)atstrauss2002.yannick.fragmentetest.ActivityThread$H. handleMessage(ActivityTctivity.on)atandroid.os.Handler.dispatchMessage(Handler.java:106)atandroid.os.Looper.loop(Looper.java:164)atandroid.app.ActivityTstrauss2002.yannick.fragmentetest(ActivityTjava.lang.)atandroid.app.RuntimeInit$metodAndArgsChread.perform(RuntimeIhread.java:2778)atandroid.app.ZygoteIhread.handle(ZygoteIhread.java:2856)引起的:android.app.IllegalStateException: listview1在android.app.MainAhread.java:1589创建(MainActive. kt: 29)at android在android. os上的android. app. ActivityThread$H. handleMessage(ActivityThread. java: 1589)。Handler.调度消息(Handler. java: 106)在android. os上。Looper. Loop(Looper. java: 164)在android. app. ActivityThread. main(ActivityThread. java: 6494)在java. lang.反射。方法.调用(本机方法)在com. android. interal. os。RuntimeInit$MEodAndArgsCaller. run(RuntimeInit. java: 438)在com. android. interal. os。ZygoteInit. main(ZygoteInit. java: 807)

以下是我更新的主要活动:

类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。扬尼克。碎片测试E/AndroidRuntime:致命异常:主进程:straus s2002。扬尼克。fragmentetest,PID:12764 java。lang.RuntimeException:无法启动活动组件信息{strauss2002.yannick.FragmentTest/strauss2002.yannick.FragmentTest.MainActivity}:java。lang.IllegalStateException:listview1在android上不能为null。应用程序。活动线程。android上的performLaunchActivity(ActivityThread.java:2778)。应用程序。活动线程。android上的handleLaunchActivity(ActivityThread.java:2856)。应用程序。活动线程-android上的wrap11(未知来源:0)。应用程序。android上的ActivityThread$H.handleMessage(ActivityThread.java:1589)。操作系统。处理程序。android上的dispatchMessage(Handler.java:106)。操作系统。活套。android上的loop(Looper.java:164)。应用程序。活动线程。java上的main(ActivityThread.java:6494)。郎。反思。方法在com上调用(本机方法)。Android内部的操作系统。RuntimeInit$MethodandArgscaler。在com上运行(RuntimeInit.java:438)。Android内部的操作系统。合子岩。主要(ZygoteInit.java:807)由:java引起。lang.IllegalStateException:listview1在strauss2002中不能为null。扬尼克。碎片测试。主要活动。在android上创建(MainActivity.kt:28)。应用程序。活动在android上执行创建(Activity.java:7009)。应用程序。活动android上的performCreate(Activity.java:7000)。应用程序。仪表。android上的callActivityOnCreate(Instrumentation.java:1214)。应用程序。活动线程。在android上执行LaunchActivity(ActivityThread.java:2731)。应用程序。活动线程。handleLaunchActivity(ActivityThread.java:2856)

这是activity_main的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"
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>

以下是fragment\u fragment1的xml:

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

以下是adapter1\u布局的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"
 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>

共有3个答案

毕泽宇
2023-03-14

您获得Null Exception的原因是您试图在片段视图完全创建之前访问listView1,这意味着listView1还不存在。

因此,您必须将您在主活动中的代码部分移动到片段的方法,如下所示:

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

        val rootView = inflater.inflate(R.layout.fragment_fragment1, container, false)

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

        //THIS IS HOW YOU REFERENCE YOU VIEWS IN A FRAGMENT IN KOTLIN
        rootView.listview1.adapter = Adapter1(this, items)

        return rootView
    }

注意,在片段中,您必须通过膨胀的根视图引用片段的视图。

皇甫礼骞
2023-03-14

我也有同样的问题。我决定将setContentView(activity\u布局)放到onResume方法中。

我不知道为什么这个错误没有在具有listView的其他活动中发生

谈桐
2023-03-14

因为您没有为listview1调用findViewById添加listview1=findViewById(R.id.yourListViewIdInXml);就在setContentView方法之后oncreate

或者如果您使用kotlin合成,请确保listview1驻留在activity_main.xml文件中

使现代化

问题仍然存在,因为您正在对id(listview1)调用findViewById,该id在activity\u main中不可用。xml。请注意,对于活动,当您调用findViewById时,它会在布局文件中搜索id,该布局文件在方法setContentView中传递,即activity\u main。xml在您的情况下。所以当你调用findViewById时

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

为此:

val listview1=findViewById<ListView>(R.id.kontaktliste)
 类似资料:
  • 所以我在FXML中定义了一个ListView 以及相应的方法 方法不是很大,但是第一行代码只在5秒后执行!但是在同一程序中的另一个ListView中,ListView没有速度问题?怎么会呢?如果需要任何其他信息,请评论

  • 我想从sqlite数据库添加的数据中在listview中显示我的所有数据。当我单击save按钮时,它显示一条消息“added successful”。但每次它都显示错误消息“data not found”。为什么不显示listview? 错误显示如下: MyDatabaseHelper.java

  • 以下项目是从一个在线课程中逐字复制的。它应该显示一个ListView,但什么也不显示。我是一个全新的Android工作室,这只是我在里面的第二个项目。这里有5个文件,我将在下面显示每个文件的内容。我只需要另一双或两双眼睛来发现问题,因为我是“虫子盲”。任何帮助都将不胜感激。 activity_main.xml OurAdapter.java 包com.example.tadhg.uiuxAdapt

  • 尊敬的开发者们。 我要问你一个问题,我觉得很难为我解决,只是因为我不知道为什么要回答,我的意思是什么??让我看看。JBoss文档中的关联没有得到全面的答案:为什么我应该使用JoinTable而不是外键,并且我不完全理解映射是如何工作的,我这样说是什么意思?我知道什么是协会是ManyToMany或ManyToOne等,他们的目的是什么,但他们如何工作和协作彼此不需要回答关于双向或单向或联合或协会,我

  • 本文向大家介绍sqlserver登陆后报不能为空不能为null的错误,包括了sqlserver登陆后报不能为空不能为null的错误的使用技巧和注意事项,需要的朋友参考一下 sql server 2012 值不能为null。参数名:viewinfo (microsoft.sqlserver.managemenmen) 是因为在C:\Users\你的用户名\AppData\Local\Temp\中,缺

  • 我正在使用自定义列表视图来显示图像和文本。下面是我的列表视图项的布局文件和后面的代码。我会在帖子的底部解释我的问题。 下面是将必要信息加载到列表视图中的后端代码。 12-21 03:54:20.827:D/OpenGrenderer(1248):启用调试模式0 12-21 03:54:20.955:我/编舞(1248):跳过36帧!应用程序可能在其主线程上做了太多的工作。 12-21 03:54: