Проблема с Android Studio и Main Activity.kt, ожидающая объявления участника

Я пытался учиться в следующих учебных пособиях YouTube. Я использую Android Studio 3.1 Canary, и я попадаю в ту же точку в учебниках и застрял. Например, если вы перейдете к этому руководству YouTube https://youtu.be/3RMboPhUbmg?t=210 с отметкой 3:30 минут.

Когда они вводят SearchSearchView MaterialSearchView; он появляется для меня с красным подчеркиванием, говорящим «ожидая объявления участника» и независимо от того, сколько поисковых запросов я пытаюсь найти, я не могу найти ответ. Каково решение этой ошибки? благодаря

Это код, содержащийся в Main2Activity.kt. Результатом должен быть вызов или знание объектов панели инструментов и материалов

import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.support.v7.widget.Toolbar import com.miguelcatalan.materialsearchview.MaterialSearchView import kotlinx.android.synthetic.main.activity_main2.* class Main2Activity : AppCompatActivity () { **MaterialSearchView searchView;** "expecting member declaration error" **Toolbar toolbar;** "expecting member declaration error" Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar); override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); toolbar=(Toolbar()) findViewbyId(R.id.toolbar); setSupportActionBar(toolbar); } *private void searchViewCode() { searchView=(MaterialSearchView)findViewById(R.id.search_view); } } 

1) Поймите свой синтаксис языка

Ваш учебник находится на Java. Вы пытаетесь написать в Котлине. Java и Kotlin имеют разный синтаксис, и если вы воспроизведете этот учебник дословно в Котлине, он потерпит неудачу.

Следуйте за turorial и напишите свой код на Java. Переключитесь на Kotlin позже, когда вы более уверены в том, что делаете. Сосредоточьтесь на одной вещи за раз.

2) Найти мнения в нужное время

Объект Activity устанавливается для вас инфраструктурой с открытым пустым конструктором. В настоящее время нет никаких точек зрения. Если вы вызове findViewById любое время до setContentView он вернет null и сбой, если вы попытаетесь присвоить его переменной, не допускающей null.

Вышеупомянутое относится как к Java, так и к Kotlin.

Для Java следуйте инструкциям. Он должен выглядеть примерно так:

 Toolbar toolbar; // Declare the variable here so it's accessible outside of onCreate. @Override public void onCreate(@Nullable final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); // Inflate view hierarchy. toolbar = (Toolbar) view.findViewById(R.id.toolbar); // Find your views. setSupportActionBar(toolbar); } 

В Котлине есть несколько вариантов.

Вы можете использовать модификатор lateinit , который позволяет объявлять переменную, не onCreate но назначать ее позже в onCreate .

 lateinit var toolbar: Toolbar override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main2) toolbar = findViewById(R.id.toolbar) as Toolbar setSupportActionBar(toolbar) } 

Или вы можете использовать lazy делегата. Переменная будет назначена при первом доступе к ней.

 val toolbar: Toolbar by lazy(LayzThreadSafetyMode.NONE) { toolbar = findViewById(R.id.toolbar) as Toolbar } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main2) setSupportActionBar(toolbar) } 

Вы также можете использовать Kotlin Android Extensions и просто получить доступ к toolbar напрямую, потому что весь тяжелый подъем сделан для вас.

 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main2) setSupportActionBar(toolbar) } 

Кажется, вы объявляете переменные searchView и toolbar синтаксисом Java, а не синтаксисом Kotlin, поэтому компилятор не понимает, что вы объявляете.

Поэтому измените декларацию на:

 var searchView: MaterialSearchView? = null val toolbar: Toolbar = view.findViewById(R.id.toolbar) as Toolbar 

или если вы используете расширения Kotlin для Android, вы можете получить панель инструментов так (напрямую используя идентификатор вида):