Android studio ';getView';凌驾于任何事物之上
我对安卓工作室很陌生。我试着用ArrayAdapter。但当我完成我的代码时,它说“getView”什么都不覆盖。我在“return teksatirview code”中得到了这个错误。 这是我的arrayadapter类:Android studio ';getView';凌驾于任何事物之上,android-studio,kotlin,overriding,getview,nothing,Android Studio,Kotlin,Overriding,Getview,Nothing,我对安卓工作室很陌生。我试着用ArrayAdapter。但当我完成我的代码时,它说“getView”什么都不覆盖。我在“return teksatirview code”中得到了这个错误。 这是我的arrayadapter类: package com.example.burcrehberi import android.content.Context import android.view.LayoutInflater import android.view.View import androi
package com.example.burcrehberi
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import kotlinx.android.synthetic.main.teksatir.view.*
class BurcArrayAdapter(
var gelencontext: Context,
resource: Int,
textViewResourceId: Int,
var burcAdlari: Array<String>,
var burcTarih: Array<String>,
var burcResimleri: Array<Int>
) : ArrayAdapter<String>(gelencontext, resource, textViewResourceId, burcAdlari) {
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View? {
var teksatirview = convertView
if (teksatirview == null) {
var inflater = LayoutInflater.from(gelencontext)
teksatirview = inflater.inflate(R.layout.teksatir, parent, false)
}
var burcImageView = teksatirview?.imgburcsembol
var burcisim = teksatirview?.tvburcadi
var burctarih = teksatirview?.tvburctarih
burcImageView?.setImageResource(burcResimleri[position])
burcisim?.setText(burcAdlari[position])
burctarih?.setText(burcTarih[position])
return teksatirview
}
}
package com.example.burcrehberi
导入android.content.Context
导入android.view.LayoutInflater
导入android.view.view
导入android.view.ViewGroup
导入android.widget.ArrayAdapter
导入kotlinx.android.synthetic.main.teksatir.view*
布卡拉亚级适配器(
var-gelencontext:Context,
资源:Int,
textViewResourceId:Int,
var burcAdlari:数组,
var-burcTarih:Array,
变量burcResimleri:数组
):ArrayAdapter(gelencontext、resource、textViewResourceId、Burcadalari){
覆盖视图(位置:Int,convertView:View?,父视图:ViewGroup?):视图{
var teksatirview=convertView
如果(teksatirview==null){
var充气机=布局充气机。从(gelencontext)
teksatirview=充气机。充气(R.layout.teksatir,父级,false)
}
var burcImageView=teksatirview?.imgburcsembol
var burcisim=teksatirview?.tvburcadi
var burctarih=teksatirview?.tvburctarih
burcImageView?.setImageResource(burcResimleri[位置])
burcisim?.setText(burcAdlari[位置])
burctarih?.setText(burctarih[位置])
返回teksatirview
}
}
您在父级:视图组?
中遇到的问题。根据签名,它必须是非空类型。但它在签名中可以为空,因此它在kotlin中的功能完全不同。只需更改为:
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
并将类型
View?
返回到View
。基本上,您的代码应该是这样的:
// first check your types for function you're overriding
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
// then rewrite internal code to prevent unnecessary optionality
val teksatirview = convertView ?: {
var inflater = LayoutInflater.from(gelencontext)
inflater.inflate(R.layout.teksatir, parent, false)!!
}()
val burcImageView = teksatirview.imgburcsembol
val burcisim = teksatirview.tvburcadi
val burctarih = teksatirview.tvburctarih
burcImageView.setImageResource(burcResimleri[position])
burcisim.setText(burcAdlari[position])
burctarih.setText(burcTarih[position])
return teksatirview
}
帖子可能是正确的,但在这种情况下,代码不会以优化的方式工作。它会为充气机页面中旋转的每个视图对象重新生成。如果数据源很大,这将导致效率低下的输出。如果signNames[位置]在日志记录中添加和测试,我想说的会更清楚。作为一个更优化的解决方案,我可以推荐:
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
var teksatirview = convertView
if (teksatirview == null) {
val inflater = LayoutInflater.from(gelencontext)
teksatirview = inflater.inflate(R.layout.teksatir, parent, false)
Log.e("TEST","inflation applied ${burcAdlari[position]}")
}
var burcImageView = teksatirview?.imgburcsembol
var burcisim = teksatirview?.tvburcadi
var burctarih = teksatirview?.tvburctarih
burcImageView?.setImageResource(burcResimleri[position])
burcisim?.setText(burcAdlari[position])
burctarih?.setText(burcTarih[position])
return teksatirview!!
}
您可以附加适配器的所有代码吗?我现在编辑了代码。您可以看到适配器类的所有代码。请尝试使用viewHolder,或者使用findViewById()方法而不是采用convertView的形式来膨胀视图及其子级。我正在添加viewHolder,但没有任何更改。在添加viewHolder时,您必须使用getTag()methodYep根据kotlin getView()这是正确的签名如您所述,并在android文档中给出。@akiilhan将函数返回类型View?更改为View。@akiilhan但convertView:View必须是convertView:View?@akiilhan只需复制粘贴并替换我的answer@akiilhan是,因为返回类型必须是非空视图,但teksatirview可为空
view?
.Changereturn-teksatirview
为return-teksatirview!!
replace-View-to-View?解决新lib版本中出现的问题。