在安卓开发中,对按钮添加监听,是每一个app都需要用到的。通常我们会用三种办法来对按钮进行监听。下面我们哎说说着三种。我个人是比较喜欢匿名内部类的方法的。
第一种,匿名内部类
匿名内部类一般通过以下代码完成,顾名思义,通过传入匿名内部类来实现监听并写出对应的事件处理
btButton.setOnClickListener(new OnClickListener() { @SuppressLint("ShowToast") @Override public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this,tipsString,Toast.LENGTH_SHORT ).show(); } });
第二种,通过当前类实现OnClickListener接口并在其必须实现的onClick方法中添加事件
public class MainActivity extends Activity implements OnClickListener ======================================== btButton2.setOnClickListener(this); @Override public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, tipsString2, Toast.LENGTH_SHORT).show(); }
第三种,在布局文件中添加 android:onClick属性来实现。这种和javascript的onclick写法是一样的,属性后面的值是方法名称。定义好后,需要在onCreate()方法中写出该方法,并且该方法必须用View 作为参数传入。比如你定义了 android:onClick="sing",那么你就必须在onCreate()中写上 sing(view v)方法。
<Button android:id="@+id/bt3" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="@string/method" android:text="@string/bt3" />
下面我们看看我写的Demo,
先看运行截图吧
然后是源代码
首先是布局文件activity_main.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" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.buttononclik.MainActivity" > <Button android:id="@+id/bt1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/bt1" /> <Button android:id="@+id/bt2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/bt2" /> <!-- 注意,下面两个按钮多了android:onClick属性。这个属性的作用就是当被点击 时候就调用设置的方法,"@string/method" 方法名可以随便起,这里我们引用 "@string/method",值为onclickMethod。这个一点和javascript很像。也就 是说,其实这里我们是不通过findViewById()来取得按钮的。所以id是可以不用 设置的。那么下面我们设置id是因为我用了两个按钮,并着俩个按钮的 android:onClick属性都设置为onclickMethod,所以如果要对相同方法名,我们 需要id作为判断,如果方法名设置为不一样,我们完全可以不用设置id。 这个方法需要在 onCreate()中写上对于的方法来处理监听事件。 --> <Button android:id="@+id/bt3" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="@string/method" android:text="@string/bt3" /> <Button android:id="@+id/bt4" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="@string/method" android:text="@string/bt4" /> </LinearLayout>
然后是java文件 MainActivity.java
package com.example.buttononclik; import android.annotation.SuppressLint; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class MainActivity extends Activity implements OnClickListener{ //定义要用到的属性 private Button btButton; private Button btButton2; private String tipsString; private String tipsString2; private String tipsString3; private String tipsString4; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //加载布局文件 setContentView(R.layout.activity_main); btButton = (Button) findViewById(R.id.bt1); tipsString = this.getString(R.string.tips); tipsString2 = this.getString(R.string.tips2); tipsString3 = this.getString(R.string.tips3); tipsString4 = this.getString(R.string.tips4); btButton2 = (Button) findViewById(R.id.bt2); /*当前类实现了OnClickListener接口, 所以我们可以传入当前类对象this作为参数,并在下面方法写事件*/ btButton2.setOnClickListener(this); //通过setOnClickListener方法并传入匿名内部类OnClickListener来实现监听 btButton.setOnClickListener(new OnClickListener() { @SuppressLint("ShowToast") @Override public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this,tipsString,Toast.LENGTH_SHORT ).show(); } }); } //这个是继承了OnClickListener方法所要实现的方法,监听事件可以在这个方法写 @Override public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, tipsString2, Toast.LENGTH_SHORT).show(); } public void onclickMethod(View v){ int id = v.getId(); switch (id) { case R.id.bt3: Toast.makeText(MainActivity.this,tipsString3 , Toast.LENGTH_SHORT).show(); break; case R.id.bt4: Toast.makeText(MainActivity.this,tipsString4 , Toast.LENGTH_SHORT).show(); break; default: break; } } }
然后是字符串文件strings.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">buttonOnclik</string> <string name="hello_world">Hello world!</string> <string name="action_settings">Settings</string> <string name="bt1">内部类实现监听</string> <string name="tips">通过匿名内部类实现监听</string> <string name="bt2">通过实现OnCllickListener接口实现监听</string> <string name="tips2">通过实现OnClickListener接口添加监听</string> <string name="method">onclickMethod</string> <string name="bt3">通过设置Onclick属性监听</string> <string name="bt4">作用是为了用id区分bt3</string> <string name="tips3">如果不是有要区别两个相同Onclick属性的按钮,id可以不用设置</string> <string name="tips4">第四个按钮被点击了</string> </resources>
时间: 2024-10-13 01:50:37