我一直在尝试通过关注YouTube教程来学习。我正在使用Android Studio 3.1 Canary,我在教程中遇到了同样的问题而陷入困境。例如,如果您在3:30分钟前往此YouTube教程https://youtu.be/3RMboPhUbmg?t=210。
当他们输入MaterialSearchView searchView时;它以红色下划线表示"期待成员声明"无论我尝试了多少次搜索,我找不到答案。这个错误的解决方案是什么?感谢
这是Main2Activity.kt中包含的代码。结果应该是调用或知道工具栏和materialsearchview对象
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);
}
}
答案 0 :(得分:3)
您的教程是Java版。你试着写在Kotlin。 Java和Kotlin有不同的语法,如果你在Kotlin中逐字复制本教程,它将会失败。
关注turorial并用Java编写代码。稍后当你对自己正在做的事情更有信心时切换到Kotlin。一次只关注一件事。
框架使用公共空构造函数为您设置Activity
对象。目前还没有找到任何观点。如果您在findViewById
之前的任何时间致电setContentView
,它将返回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);
}
在Kotlin有几种选择。
您可以使用lateinit
修饰符,它允许您声明一个不可为空的变量,但稍后在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)
}
答案 1 :(得分:0)
您似乎使用Java语法声明了Name Next Due Qty-Want
----------------------------------
A 11/20/17 13
B 12/29/17 2
C 11/10/17 2
和searchView
变量,而不是Kotlin语法,因此编译器无法理解您要声明的内容。
所以将声明改为:
toolbar
或者如果您使用Kotlin Android扩展程序,您应该能够像这样检索工具栏(直接使用视图ID):
答案 2 :(得分:0)
主要问题是语法,只要将3系列升级到4。Java语法就会转换为Kotlin语法。
科林语法 :
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main2)
}
}
Java语法 :
@Override
public void onCreate(@Nullable final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2); // Inflate view hierarchy.
}
}
如果要将Kotlin语法更改为Java语法。
之后请回到mainActivity编程面板 工具-> KOTLIN->显示KOTLIN字节码 然后检查 JVM 8目标,并勾选。
此后,无效的捕获/重新启动
问题已解决。
答案 3 :(得分:-2)
在我的情况下,问题是来自.PDF的不可见字符应有的复制和粘贴
请注意,以下代码段中的“ {”和“ onClick”之间有两个字符。
setOnClickListener { onClick(item) }
这是我做噩梦的原因。