【发布时间】:2021-01-19 17:46:00
【问题描述】:
我正在用 kotlin 开发我的第一个应用程序。我偶然发现了这个错误,我的应用程序在启动后立即关闭。我已经实现了一个菜单,现在正在为主页创建一个带有一些图像的网格视图。我不知道是什么导致了这个错误,但我知道它与网格视图代码有关,因为我首先实现了菜单并且应用程序运行良好。可能是因为我试图在片段中而不是直接在 MainActivity 视图中执行网格视图吗?
MainActivity.kt
val TAG = "MainActivity"
lateinit var gridView: GridView
private var gridImageNames = arrayOf(
"Golden Bridge", "Tampa Bay Buccaneers", "Chevrolet Camaro",
"Vegetable Casserole", "Sweet and Sour Chicken", "Design Vector",
"Pork Loin", "Sidney's Opera House", "Pasta Dish",
"Dope Setup", "Singapore", "Tacos Dish",
"Toquio", "Warm Salad Dish")
private var gridImages = intArrayOf(
R.drawable.bridge, R.drawable.buccaneers, R.drawable.camaro,
R.drawable.casserole, R.drawable.chicken, R.drawable.design,
R.drawable.lombo, R.drawable.operahouse, R.drawable.pasta,
R.drawable.setup, R.drawable.singapore, R.drawable.tacos,
R.drawable.toquio, R.drawable.warmsalad)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val bottom_navigation: BottomNavigationView = findViewById(R.id.bottom_navigation)
gridView = findViewById(R.id.home_grid)
val mainAdapter = MainAdapter(this@MainActivity, gridImageNames, gridImages)
gridView.adapter = mainAdapter
val homeFragment = HomeFragment()
val listsFragment = ListsFragment()
val searchFragment = SearchFragment()
bottom_navigation.setOnNavigationItemSelectedListener {
when (it.itemId) {
R.id.nav_home -> {
setCurrentFragment(homeFragment)
Log.i(TAG, "Home Selected")
}
R.id.nav_lists -> {
setCurrentFragment(listsFragment)
Log.i(TAG, "My Lists Selected")
}
R.id.nav_search -> {
setCurrentFragment(searchFragment)
Log.i(TAG, "Search Selected")
}
}
true
}
gridView.onItemClickListener = AdapterView.OnItemClickListener { _, _, position, _ ->
Toast.makeText(
applicationContext, "You Clicked " + gridImageNames[+position],
Toast.LENGTH_SHORT
).show()
}
}
private fun setCurrentFragment(fragment : Fragment) =
supportFragmentManager.beginTransaction().apply {
replace(R.id.fl_wrapper, fragment)
commit()
}
MyAdapter.kt
internal class MainAdapter(
private val context: Context,
private val imageNames: Array<String>,
private val images: IntArray
) : BaseAdapter(){
private var layoutInflater: LayoutInflater? = null
private lateinit var imageView: ImageView
override fun getCount(): Int {
return imageNames.size
}
override fun getItem(position: Int): Any? {
return null
}
override fun getItemId(position: Int): Long {
return 0
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View? {
var convertView = convertView
if (layoutInflater == null) {
layoutInflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
}
if (convertView == null){
convertView = layoutInflater!!.inflate(R.layout.home_grid_row, null)
}
imageView = convertView!!.findViewById(R.id.grid_image)
imageView.setImageResource(images[position])
return convertView
}
}
home_grid_row.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimary">
<ImageView
android:id="@+id/grid_image"
android:layout_width="100dp"
android:layout_height="100dp"/>
</RelativeLayout>
fragment_home.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimary">
<GridView
android:id="@+id/home_grid"
android:numColumns="3"
android:verticalSpacing="1dp"
android:horizontalSpacing="1dp"
android:background="@color/colorPrimary"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</RelativeLayout>
Logcat 错误信息:
2021-01-19 18:08:10.127 6067-6067/cm.a12872_a18797.favlist E/AndroidRuntime: FATAL EXCEPTION: main
Process: cm.a12872_a18797.favlist, PID: 6067
java.lang.RuntimeException: Unable to start activity ComponentInfo{cm.a12872_a18797.favlist/cm.a12872_a18797.favlist.MainActivity}: java.lang.IllegalStateException: findViewById(R.id.home_grid) must not be null
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3782)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3961)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2386)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:8178)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101)
Caused by: java.lang.IllegalStateException: findViewById(R.id.home_grid) must not be null
at cm.a12872_a18797.favlist.MainActivity.onCreate(MainActivity.kt:38)
at android.app.Activity.performCreate(Activity.java:8086)
at android.app.Activity.performCreate(Activity.java:8074)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1313)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3755)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3961)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2386)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:8178)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101)
【问题讨论】:
-
错误信息是什么?
-
没有错误信息。该应用程序在启动后立即关闭
-
能否请您从 logcat 发布相应的错误?
-
@S-Sh 我在问题末尾添加了logcat错误信息
标签: android android-layout kotlin