第一种,比较原始的
1)先在Activity里面添加onclick事件,activity通过onCreate方法指定到具体的页面
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//渲染到具体的页面,ctrl + 鼠标右键直达页面
setContentView(R.layout.activity_main);
}
public void addOnClick(View view){
Toast.makeText(this, "add", Toast.LENGTH_SHORT).show();
}
2)然后在xml的button上增加click事件,头部的 tools:context=".MainActivity"
指向具体的activity, ctrl + 鼠标右键直达到类;
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
android:onClick="addOnClick" //增加onclick事件,将它与方法绑定
tools:layout_editor_absoluteX="92dp"
tools:layout_editor_absoluteY="423dp" />
第二种,使用插件butterknife里面的注解
1)首先在项目的gradle里面增加配置
classpath 'com.jakewharton:butterknife-gradle-plugin:9.0.0-rc2'
图-1
###### 2) 然后在使用app的gradle里面,头部增加配置:
apply plugin: 'com.jakewharton:butterknife'
图-2
dependencies依赖里增加:
api 'com.jakewharton:butterknife:9.0.0-rc1'
annotationProcessor 'com.jakewharton:butterknife-compiler:9.0.0-rc1'
图-3
###### 3)点击文件的头部黄色的Sync Now,进行架包下载
图-4
图-5,同步失败了,点击该按钮再次同步
再不行,进行设置自动更新
###### 4)接下来,就可以在activity里面使用@OnClick注解,xml文件的控件上无需增加onclick事件,事件直接在activity里面绑定。
/**
* OnClick的使用,id必须在对应的xml文件里存在
*/
@OnClick(R.id.button)public void click(){
Toast.makeText(this, "aaaaaaaa", Toast.LENGTH_SHORT);
}
第三种,还是原始的写法,只是多个按钮使用同一个事件,该如何写呢?
/**
* 实现了View.OnClickListener接口,通过setOnClickListener对页面上的按钮根据id进行绑定,不需要为按钮写click,只需要设置id
*/
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//每个按钮绑定一个事件,this也可以单独为一个类,如果是单独一个类时,该类需要实现View.OnClickListener接口,此处直接new 该类即可
findViewById(R.id.update).setOnClickListener(this);
findViewById(R.id.quit).setOnClickListener(this);
}
@Override
public void onClick(View v) {
Toast.makeText(this, v.getId() + "", Toast.LENGTH_SHORT);
// 接收用户输入
switch (v.getId()) {
case R.id.update:
Toast.makeText(this, "aaaaaaaa", Toast.LENGTH_SHORT).show();
break;
case R.id.quit:
Toast.makeText(this, "bbbbb", Toast.LENGTH_SHORT).show();
break;
}
}
}
第四种写法,匿名内部类的方式,xml中的控件上无需写onclick事件;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/**
* 匿名内部类方式,进行onclick事件
*/
Button updateButton = (Button)findViewById(R.id.update);
updateButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
//实现方法可以提取出去
Log.i("aaaa","bbbbb");
}
});
}
**总结:
今天把android app中onclick的几种写法,扒拉了一下,类似于茴香豆的茴字有几种写法,主要是为了适用场景,在不同的业务场景下使用不同的写法。
目前,最流行的应该是使用butterknife插件中的@OnClick注解,主要原因是写法简洁,但在使用前,需要对butterknife插件进行配置,配置失败时,需要配置多次,直至配置成功。butterknife插件中不仅仅是对@OnClick的使用,还有其他更便捷的使用,这个后面会慢慢深入。
掌握了这几种写法,作为一个小白,再看别人代码时,就可以不用那么头大了。个人比较喜欢内部类的写法,内部类的写法,经常在JavaScript中这样写,Java中偶尔也这样写,节省空间,节约代码。
对于一个小白,更习惯于第一种写法。当然每种写法都认识才行,认识了再尝试一下。不然,怎么阅读其他同事写的代码呢。
**
网友评论