前言
Kotlin 是一个基于 JVM 的新的编程语言,由 JetBrains 开发。
Kotlin可以编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。
JetBrains,作为目前广受欢迎的Java IDE IntelliJ 的提供商,在 Apache 许可下已经开源其Kotlin 编程语言。
Kotlin已正式成为Android官方支持开发语言。
事件监听的坑
java 需要关心 到对应的控件上才可以设置监听
Button btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
但是 使用kotlin 就不用那么麻烦了 ,直接找到控件的id 直接设置 监听 ,当然在 Activity 中很简单
btn.setOnClickListener(View.OnClickListener {
})
}
就那么简单 。
下面最重要的来了,
当我们习惯使用 java 来写 Fragment 中的 事件监听的时候 ,这就坑大了
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(getViewId(), null);
bind = ButterKnife.bind(this, view);
initView();
initListenner();
return view ;
}
以上是java 代码 ,我们习惯 在return view 之前 做 initListener(),java 可以 没有报空指针,但是在 kotlin 中 会暴 空指针 ,那怎么解决呢,相信大家早已经很 0 疼了 ,那么我就来告诉大家吧,
0疼 的我 写下了以下代码 完成事件监听
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initView()
initListener()
}
“`
你不注意可能看不出来 ,因为 kotlin 中的fragment 中有 两个方法
一个是 onCreateView () ,一个是onViewCreate()方法 ,这个方法在onCreateView 中return view 之后才调用。 这下明白了吧 ,
我们必须在执行完onCreateView 中的 return view 之后 才能 initListenner () ;
提供一张图 对比以下
这个坑害的我们 好苦 啊 。