2017-01-29 68 views
12
kullanmaktadır

Benim ingilizce için özür dilerim. Ben kotlin öğreniyorum ve şimdi ArrayAdapter yazma ihtiyacım var, ama bu convertView = vi.inflate(resource, null) kotlin'i denediğimde bazı hatam var Val cannot be reassigned. Kotline sitesinde java sınıfını kotlin sınıfına dönüştürüyorum ve bu sitede yapmayı deneyin. Neden hatalıyım, bunu nasıl düzeltebilirim?ArrayAdapter, Kotlin android

open class MyAdapter(context: Context, resource: Int, list: ArrayList<MyItems>) : 
     ArrayAdapter<MyItems>(context, resource, list) { 

    var resource: Int 
    var list: ArrayList<MyItems> 
    var vi: LayoutInflater 

    init { 
     this.resource = resource 
     this.list = list 
     this.vi = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater 
    } 


    override fun getView(position: Int, convertView: View?, parent: ViewGroup): View? { 
     var holder: ViewHolder 

     if(convertView == null){ 
      convertView = vi.inflate(resource, null) //error in this line 
      holder = ViewHolder() 

      holder.image = convertView.findViewById(R.id.myImage) as ImageView? 

      convertView.tag(holder) //error in this line 

     } else { 
      holder = convertView.tag as ViewHolder 
     } 

     return convertView 
    } 

    internal class ViewHolder { 
     var image: ImageView? = null 
    } 

} 

cevap

14

Parametre değişkeni yeniden atanamaz, size iade görüşe sahip bir yerel değişken oluşturmak gerekir:

override fun getView(position: Int, convertView: View?, parent: ViewGroup): View? { 
    var holder: ViewHolder 
    var retView: View 

    if(convertView == null){ 
     retView = vi.inflate(resource, null) 
     holder = ViewHolder() 

     holder.image = retView.findViewById(R.id.myImage) as ImageView? 

     retView.tag(holder) //error in this line 

    } else { 
     holder = convertView.tag as ViewHolder 
     retView = convertView 
    } 

    return retView 
} 
+0

'' 'retView.tag = holder''' hatayı düzeltmek –