Android ArrayAdapter的空对象引用
我正在尝试将ArrayList改编为片段中的AutoCompleteTextView。我已经在另一个程序中使用了这个,我正在MainActivity中应用适配器 我得到的错误是:Android ArrayAdapter的空对象引用,android,android-fragments,kotlin,android-arrayadapter,Android,Android Fragments,Kotlin,Android Arrayadapter,我正在尝试将ArrayList改编为片段中的AutoCompleteTextView。我已经在另一个程序中使用了这个,我正在MainActivity中应用适配器 我得到的错误是: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.AutoCompleteTextView.setAdapter(android.widget.ListAdapter)' on a null obj
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.AutoCompleteTextView.setAdapter(android.widget.ListAdapter)' on a null object reference
我的片段代码-newFlightFrament.kt:
package com.android.joncb.flightlogbook
import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.widget.ArrayAdapter
import com.android.joncb.flightlogbook.ExtFunctions.CreateList
import com.android.joncb.flightlogbook.dto.AirlineDTO
import com.google.gson.GsonBuilder
import kotlinx.android.synthetic.main.fragment_new_flight.*
private const val ARG_PARAM1 = "airlines"
class newFlightFragment : Fragment() {
// TODO: Rename and change types of parameters
private var param1: String? = null
private var airlineNameOnly = ArrayList<String>()
private var airlineFSCodeOnly = ArrayList<String>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
param1 = it.getString(ARG_PARAM1)
// Log.e("args", param1)
println(param1)
val gson = GsonBuilder().create()
val tempList :List<AirlineDTO> = gson.fromJson(param1,Array<AirlineDTO>::class.java).toList()
val airlines :ArrayList<AirlineDTO> = arrayListOf(AirlineDTO())
airlines.addAll(tempList)
airlineNameOnly = CreateList(airlines, "airlineName")!!
airlineFSCodeOnly = CreateList(airlines, "FS")!!
}
// val adapter = context?.let {
// ArrayAdapter<String>(
// it,
// android.R.layout.simple_list_item_1,
// airlineNameOnly
// )
// }
val adapter = ArrayAdapter<String>(requireActivity().baseContext,android.R.layout.simple_list_item_1,airlineNameOnly)
actxtAirlineName.setAdapter(adapter)
}
}
注意,在这个调用上面的注释部分中,我尝试了另一种方法,这导致了相同的错误
我可以确认ArrayList airlineNameOnly已正确填充
任何想法都是好主意
谢谢。根据我的更改代码 首先包括这个
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout. fragment_new_flight, container, false)
}
arguments?.let {
param1 = it.getString(ARG_PARAM1)
// Log.e("args", param1)
println(param1)
val gson = GsonBuilder().create()
val tempList :List<AirlineDTO> = gson.fromJson(param1,Array<AirlineDTO>::class.java).toList()
val airlines :ArrayList<AirlineDTO> = arrayListOf(AirlineDTO())
airlines.addAll(tempList)
airlineNameOnly = CreateList(airlines, "airlineName")!!
airlineFSCodeOnly = CreateList(airlines, "FS")!!
// val adapter = context?.let {
// ArrayAdapter<String>(
// it,
// android.R.layout.simple_list_item_1,
// airlineNameOnly
// )
// }
val adapter = ArrayAdapter<String>(requireActivity().baseContext,android.R.layout.simple_list_item_1,airlineNameOnly)
actxtAirlineName.setAdapter(adapter)
}
}
override fun onCreateView(充气机:布局充气机,容器:ViewGroup?,savedInstanceState:Bundle?):视图?{
返回充气机。充气(右布局。碎片\新航班,集装箱,假)
}
争论?让我们{
param1=it.getString(ARG_param1)
//Log.e(“args”,参数1)
println(参数1)
val gson=GsonBuilder().create()
val templast:List=gson.fromJson(param1,Array::class.java).toList()
val airlines:ArrayList=arrayListOf(AirlineDTO())
airlines.addAll(圣殿骑士)
airlineName=CreateList(航空公司,“airlineName”)!!
airlineFSCodeOnly=CreateList(航空公司,“FS”)!!
//val适配器=上下文?.let{
//阵列适配器(
//它,,
//android.R.layout.simple\u list\u item\u 1,
//仅限航空公司
// )
// }
val adapter=ArrayAdapter(requireActivity().baseContext,android.R.layout.simple_list_item_1,仅限AirlineName)
actxtAirlineName.setAdapter(适配器)
}
}
希望它能起作用,谢谢!快乐编码
我看不出你在哪里夸大了你的观点。也许有问题?片段的生命周期与活动不同。您不能在
onCreate
中使用视图。(并且您没有膨胀视图层次结构。)首先阅读:忘记baseContext
,您将失去主题。请解释一下你到底改变了什么,以及为什么它会起作用。好的!让我给你一个完整的解释,为什么你要把代码放在类中。它甚至不会编译并将代码包装到函数中。谢谢@Cong Hai。这就成功了。在尝试其他解决方案时,我确实尝试充气,但现在意识到我在适配器后充气。我还在想这个。慢慢地,慢慢地,但要到达那里。谢谢TanyaY。这就是问题所在-只是尝试在应用适配器后充气,因此寻找其他解决方案。
actxtAirlineName.setAdapter(adapter)
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout. fragment_new_flight, container, false)
}
arguments?.let {
param1 = it.getString(ARG_PARAM1)
// Log.e("args", param1)
println(param1)
val gson = GsonBuilder().create()
val tempList :List<AirlineDTO> = gson.fromJson(param1,Array<AirlineDTO>::class.java).toList()
val airlines :ArrayList<AirlineDTO> = arrayListOf(AirlineDTO())
airlines.addAll(tempList)
airlineNameOnly = CreateList(airlines, "airlineName")!!
airlineFSCodeOnly = CreateList(airlines, "FS")!!
// val adapter = context?.let {
// ArrayAdapter<String>(
// it,
// android.R.layout.simple_list_item_1,
// airlineNameOnly
// )
// }
val adapter = ArrayAdapter<String>(requireActivity().baseContext,android.R.layout.simple_list_item_1,airlineNameOnly)
actxtAirlineName.setAdapter(adapter)
}
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_new_flight, container, false)
}