一.匿名内部内方式
此方法整体看上去简单易懂,个人比较常用
xml布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.button.MainActivity" > <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按钮" /> </LinearLayout>java代码
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 找到按钮控件 Button button = (Button) findViewById(R.id.button); // 匿名内部内方式设置点击事件 button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //在屏幕上显示提示 Toast 吐司 Toast.makeText(MainActivity.this, "匿名内部内方式", Toast.LENGTH_SHORT).show(); } }); } }在多个控件都需要实现事件监听时,可见将匿名对象抽取出来,避免多次创建对象占用资源
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 1.找到按钮控件 Button button = (Button) findViewById(R.id.button); // 3.设置按钮点击事件 button.setOnClickListener(onClickListener); } // 2.得到 OnClickListener 对象 OnClickListener onClickListener = new OnClickListener() { @Override public void onClick(View v) { // 可以使用 switch 通过匹配控件id 设置不同的按钮提示不同内容 // view.getId() 得到点击的控件的id switch (v.getId()) { case R.id.button: Toast.makeText(MainActivity.this, "可以使用设置不同内容", Toast.LENGTH_SHORT).show(); break; case 2: // 省略 break; default: break; } } }; }
二.实现OnClickListener接口重写onClick方法
此方法适合用于多个控件实现点击事件监听
public class MainActivity extends Activity implements OnClickListener{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 1.找到按钮控件 Button button = (Button) findViewById(R.id.button); // 3.按钮设置点击事件 button.setOnClickListener(this); } @Override public void onClick(View v) { // 2.实现OnClickListener接口,然后重写onClick方法 Toast.makeText(MainActivity.this, "实现OnClickListener", Toast.LENGTH_SHORT).show(); } } 此方法也可以自己创建一个类实现 OnClickListener接口public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 1.找到按钮控件 Button button = (Button) findViewById(R.id.button); // 3.按钮设置点击事件 button.setOnClickListener(new myOnclickLister()); } // 2.自己创建类实现OnClickListener接口,然后重写onClick方法 class myOnclickLister implements OnClickListener { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "实现OnClickListener", Toast.LENGTH_SHORT).show(); } } }
三.XML种设置按钮的OnClick属性
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.button.MainActivity" > <Button android:onClick="btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按钮" /> </LinearLayout>然后在java代码种建立onClick属性对应名字的方法
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } //定义与XML种OnClick属性名字对应的方法 注意在方法参数种加上 View v public void btn(View v) { Toast.makeText(MainActivity.this, "设置Onclick属性", Toast.LENGTH_SHORT).show(); } }此方法虽然挺方便,代码简洁,但因为方面命名问题不易让他人读懂,且在多个控件种不方法使用。