2017-01-29 27 views
12

Przepraszamy za mój angielski. Uczę się kotlin i teraz potrzebuję napisać ArrayAdapter, ale mam pewien błąd, gdy próbuję to zrobić convertView = vi.inflate(resource, null) kotlin powiedzieć mi Val cannot be reassigned. Na stronie kotline konwertuję klasę java na klasę kotlin i próbuję polubić na tej stronie. Dlaczego mam erro, jak mogę to naprawić?ArrayAdapter use 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 
    } 

} 

Odpowiedz

14

zmienny Parametr nie może być ponownie przydzielony, trzeba będzie utworzyć lokalną zmienną trzymać zwrócony widok:

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''' naprawić błąd –