android - [Android][ListView]无法在 fragment 中显示ListView

标签 android listview kotlin

语言: Kotlin 目标:最新的sdk

那么这里实际发生了什么,

我的底部导航栏有四个选项卡,每个选项卡都有一个 fragment 。

在第一个 fragment 中,我试图显示一个静态 ListView,它使应用程序强制关闭。

主要 Activity .kt

import android.os.Bundle
    import android.widget.ArrayAdapter
    import android.widget.ListView
    import androidx.appcompat.app.AppCompatActivity
    import com.google.android.material.bottomnavigation.BottomNavigationView
    import android.widget.TextView
    import androidx.fragment.app.Fragment
    import android.content.ClipData.Item
    import android.widget.ListAdapter
    import kotlinx.android.synthetic.main.fragment_rough_calc.*


    class MainActivity : AppCompatActivity() {

        private lateinit var fragment: Fragment
        private lateinit var listView: ListView
        private val onNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
            when (item.itemId) {
                R.id.navigation_rough -> {
                    //supportFragmentManager.beginTransaction().replace(R.id.fragment_in_rough_calc, PolishCalcFragment()).commit()
                    supportFragmentManager.beginTransaction().replace(R.id.fragment_container, RoughCalcFragment()).commit()
                    return@OnNavigationItemSelectedListener true
                }
                R.id.navigation_polish -> {
                    supportFragmentManager.beginTransaction().replace(R.id.fragment_container, PolishCalcFragment()).commit()
                    return@OnNavigationItemSelectedListener true
                }
                R.id.navigation_saved -> {
                    supportFragmentManager.beginTransaction().replace(R.id.fragment_container, SavedFragment()).commit()
                    return@OnNavigationItemSelectedListener true
                }
                R.id.navigation_settings -> {
                    supportFragmentManager.beginTransaction().replace(R.id.fragment_container, SettingsFragment()).commit()
                    return@OnNavigationItemSelectedListener true
                }
            }
            true
        }

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

            val navView: BottomNavigationView = findViewById(R.id.nav_view)
            navView.setOnNavigationItemSelectedListener(onNavigationItemSelectedListener)
            listView = findViewById<ListView>(R.id.part_list)
            val partList = ArrayList<String>()//Creating an empty arraylist
            partList.add("Part A")
            partList.add("Part B")
            partList.add("Part C")
            partList.add("Part D")
            partList.add("Part E")

            var partAdapterStatic = ArrayAdapter<String>(this, R.layout.part_view, partList)

            listView.adapter = partAdapterStatic

            supportFragmentManager.beginTransaction().replace(R.id.fragment_container, RoughCalcFragment()).commit()

        }

    }

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:id = "@+id/container"
        android:layout_width = "match_parent"
        android:layout_height = "match_parent"
        tools:context = ".MainActivity">

    <FrameLayout
            android:id = "@+id/fragment_container"
            android:layout_width = "match_parent"
            android:layout_height = "wrap_content"
            app:layout_constraintEnd_toEndOf = "parent"
            app:layout_constraintBottom_toTopOf = "parent"
            app:layout_constraintTop_toTopOf = "parent"
            app:layout_constraintStart_toStartOf = "parent"/>

    <com.google.android.material.bottomnavigation.BottomNavigationView
            style = "@style/Widget.MaterialComponents.BottomNavigationView.Colored"
            android:id = "@+id/nav_view"
            android:layout_width = "wrap_content"
            android:layout_height = "wrap_content"
            app:layout_constraintBottom_toBottomOf = "parent"
            app:layout_constraintLeft_toLeftOf = "parent"
            app:layout_constraintRight_toRightOf = "parent"
            app:menu = "@menu/bottom_nav_menu"
            android:elevation = "0px"
            app:itemIconTint = "@drawable/bottom_navigation_colors"
            app:itemTextColor = "@drawable/bottom_navigation_colors"/>

</androidx.constraintlayout.widget.ConstraintLayout>

fragment _1.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
        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"
        xmlns:app = "http://schemas.android.com/apk/res-auto"
        android:background = "@color/colorPrimary"
        android:paddingTop="175dp"
        android:paddingLeft="15dp"
        android:paddingRight="15dp">

    <com.google.android.material.textfield.TextInputLayout
            style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"
            android:id="@+id/rawStoneWeight"
            app:boxCornerRadiusBottomEnd ="10dp"
            app:boxCornerRadiusBottomStart="10dp"
            app:boxCornerRadiusTopStart="10dp"
            app:boxCornerRadiusTopEnd="10dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/rough_weight_input_hint"
            app:hintAnimationEnabled="true">

        <com.google.android.material.textfield.TextInputEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="numberDecimal"
                android:autoSizeMaxTextSize="5dp"
                android:textStyle="bold"
                android:maxLength="6"/>

    </com.google.android.material.textfield.TextInputLayout>

    <androidx.appcompat.widget.AppCompatTextView
            android:layout_width = "wrap_content"
            android:layout_height = "wrap_content"
            android:text="@string/rough_weight_input_suffix"
            android:layout_alignParentEnd="true"
            android:paddingTop="35dp"
            android:paddingEnd="17dp"
            android:paddingStart="17dp"
            android:textStyle="bold" />

    <ListView
            android:id="@+id/part_list"
            android:layout_below="@id/rawStoneWeight"
            android:paddingBottom="90dp"
            android:layout_width = "match_parent"
            android:layout_height = "wrap_content" >

    </ListView>

</RelativeLayout>

日志错误:

2019-02-24 17:51:26.876 22239-22239/in.navkargems.tools E/AndroidRuntime: FATAL EXCEPTION: main
    Process: in.navkargems.tools, PID: 22239
    java.lang.RuntimeException: Unable to start activity ComponentInfo{in.navkargems.tools/in.navkargems.tools.MainActivity}: java.lang.IllegalStateException: findViewById<ListView>(R.id.part_list) must not be null
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2951)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3086)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6718)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: java.lang.IllegalStateException: findViewById<ListView>(R.id.part_list) must not be null
        at in.navkargems.tools.MainActivity.onCreate(MainActivity.kt:48)
        at android.app.Activity.performCreate(Activity.java:7144)
        at android.app.Activity.performCreate(Activity.java:7135)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2931)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3086) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:193) 
        at android.app.ActivityThread.main(ActivityThread.java:6718) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 

请帮我解决这个问题 谢谢大家的宝贵时间(:

最佳答案

你的问题在这里

        listView = findViewById<ListView>(R.id.part_list)

你的列表是 fragment 而不是 Activity

所以 listView 将为 Null

所以你必须在 fragment 中定义你的 ListView 并初始化它

关于android - [Android][ListView]无法在 fragment 中显示ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54851843/

相关文章:

android - 我正在使用 Kotlin 开发一个 Android 应用程序,我正在尝试从 Firestore 获取文档引用

android - 由于 fragment 中的 textwacher,无法更改 edittext 的值

java - 如何管理对象列表?

json - Ktor:使用List作为多平台中的根目录来序列化/反序列化JSON

android - 如何使用 Dagger 2 提供上下文?

java - Android - 位图缓存占用大量内存

Android比较日期时间

android - 带有 countDownTimer 的 onFinish 方法问题的 listView

java - 如何从数据库中删除项目

java - 如何通过提交适当的 .YAML 文件以编程方式调用 Argo