Почему я должен писать именно так Kotlin? - PullRequest
0 голосов
/ 04 февраля 2020

Я новичок в Kotlin для Android. У меня есть несколько глупых вопросов, на которые я не могу найти ответы.

Первый вопрос. Например, у меня есть такой код

class myAdapter(context: Context, val list: List<DataSource>)
: ArrayAdapter<DataSource>(context, 0, list){

Если я напишу так (без аргументов)

class myAdapter(context: Context, val list: List<DataSource>)
: ArrayAdapter<DataSource>(){

, тогда intellij выдаст мне эту ошибку: Ни одна из следующих функций не может быть вызывается с предоставленными аргументами. Почему я должен предоставлять аргументы ArrayAdapter и на что они влияют?

Второй вопрос. Например, у меня есть код:

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

    val lf: LayoutInflater = LayoutInflater.from(context)
    val row = lf.inflate(R.layout.custom_list_view, parent, false)

    val view_icon = row.findViewById<ImageView>(R.id.icon)
    val view_title = row.findViewById<TextView>(R.id.title)
    val view_subtitle = row.findViewById<TextView>(R.id.subtitle)

    val ds: DataSource = list[position]
    view_icon.setImageResource(R.drawable.ic_folder_black_24dp)
    view_title.text = ds.ds_title
    view_subtitle.text = ds.ds_subtitle

    return row
}

Что означает переменная "row" и почему я должен назначить ей "inflate"? Как объяснить это словами? Если я не назначу, то раздувать не получится. И что это значит:

list[position]

Где я могу прочитать об этом? Kotlin просто сломай мой разум.

1 Ответ

0 голосов
/ 04 февраля 2020

Почему я должен предоставлять аргументы ArrayAdapter и на что они влияют?

В основном, когда у вас есть строка типа class MyClass(xxx) : SuperClass(yyy), это означает, что вы создаете новый класс с именем MyClass с конструктором, который принимает 1 аргумент xxx и расширяет SuperClass - из которых вы вызываете конструктор с аргументом yyy.

Теперь, поместив это в контекст вашего примера, вы сначала пытаетесь вызвать конструктор ArrayAdapter с 3 аргументами - Context, int и List - который существует и может быть назван. Однако ArrayAdapter не имеет конструктора без аргументов, следовательно, ошибка компиляции.

Что касается второго вопроса, вы можете прочитать больше об официальной документации 1020 * или здесь. например - я думаю, вы найдете много материала в Интернете - но в основном "inflate" означает "визуализация элемента пользовательского интерфейса", поэтому row - это переменная, которая содержит ссылку на строку, которую вы только что надули.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...