Problema con Android Studio y Main Activity.kt esperando la statement del miembro

He estado tratando de aprender a través de los siguientes tutoriales de YouTube. Estoy usando Android Studio 3.1 Canary y llego al mismo punto en los tutoriales y me quedo atascado. Por ejemplo, si vas a este tutorial de YouTube https://youtu.be/3RMboPhUbmg?t=210 en la marca de 3:30 minutos.

Cuando están ingresando MaterialSearchView searchView; aparece para mí con un subrayado rojo que dice "esperando la statement del miembro" y no importa cuántas búsquedas intente no puedo encontrar una respuesta. ¿Cuál es la solución a este error? Gracias

Este es el código contenido en Main2Activity.kt. El resultado debería ser llamar o conocer la barra de herramientas y los objects de búsqueda de materiales

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); } } 

Solutions Collecting From Web of "Problema con Android Studio y Main Activity.kt esperando la statement del miembro"

1) Comprenda su syntax de idioma

Tu tutorial está en Java. Intentas escribir en Kotlin. Java y Kotlin tienen una syntax diferente y si reproduce este tutorial palabra por palabra en Kotlin, fallará.

Sigue el turorial y escribe tu código en Java. Cambia a Kotlin más tarde cuando tengas más confianza con lo que estás haciendo. Enfócate en una cosa a la vez.

2) Encuentra vistas en el momento adecuado

El object de la Activity lo instala el marco con un constructor público vacío. En este momento no hay puntos de vista que se encuentran. Si llama a findViewById cualquier momento antes de setContentView , devolverá null y se bloqueará si intenta asignarlo a una variable que no setContentView null .

Lo anterior aplica tanto para Java como para Kotlin.

Para Java, sigue el tutorial. Debería verse algo como esto:

 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); } 

En Kotlin hay varias opciones.

Puede usar el modificador lateinit que le permite declarar una variable que no onCreate pero asignarla más adelante en 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) } 

O puede usar delegado lazy . La variable se asignará la primera vez que acceda a ella.

 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) } 

También puede usar las extensiones de Kotlin para Android y simplemente acceder directamente a la toolbar porque todo el trabajo pesado está hecho para usted.

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

Parece que estás declarando tus variables searchView y toolbar utilizando la syntax de Java, y no la syntax de Kotlin, por lo que el comstackdor no comprende lo que estás declarando.

Entonces cambie la statement a:

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

o si está utilizando las extensiones de Kotlin para Android, debería poder recuperar la barra de herramientas de ese modo (usando la identificación de la vista directamente):