IT@程序员猿媛Java架构技术进阶

Android APP里的onclick事件如何写?

2019-07-15  本文已影响0人  程就人生
第一种,比较原始的
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中偶尔也这样写,节省空间,节约代码。
对于一个小白,更习惯于第一种写法。当然每种写法都认识才行,认识了再尝试一下。不然,怎么阅读其他同事写的代码呢。
**

上一篇 下一篇

猜你喜欢

热点阅读