Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android studio ';getView';凌驾于任何事物之上_Android Studio_Kotlin_Overriding_Getview_Nothing - Fatal编程技术网

Android studio ';getView';凌驾于任何事物之上

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

我对安卓工作室很陌生。我试着用ArrayAdapter。但当我完成我的代码时,它说“getView”什么都不覆盖。我在“return teksatirview code”中得到了这个错误。 这是我的arrayadapter类:

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?
.Change
return-teksatirview
return-teksatirview!!
replace-View-to-View?解决新lib版本中出现的问题。