第一种,匿名内部类
匿名内部类一般通过以下代码完成,顾名思义,通过传入匿名内部类来实现监听并写出对应的事件处理
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",那么你就必须在当前类中写上 sing(view v)方法。
android:id="@+id/bt3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="@string/method"
android:text="@string/bt3" />
首先是布局文件activity_main.xml
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" >
android:id="@+id/bt1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/bt1" />
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。
这个方法需要在当前类中写上对于的方法来处理监听事件。
android:id="@+id/bt3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="@string/method"
android:text="@string/bt3" />
android:id="@+id/bt4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="@string/method"
android:text="@string/bt4" />
然后是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
buttonOnclik
Hello world!
Settings
内部类实现监听
通过匿名内部类实现监听
通过实现OnCllickListener接口实现监听
通过实现OnClickListener接口添加监听
onclickMethod
通过设置Onclick属性监听
作用是为了用id区分bt3
如果不是有要区别两个相同Onclick属性的按钮,id可以不用设置
第四个按钮被点击了 第一种,匿名内部类
匿名内部类一般通过以下代码完成,顾名思义,通过传入匿名内部类来实现监听并写出对应的事件处理
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",那么你就必须在当前类中写上 sing(view v)方法。
android:id="@+id/bt3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="@string/method"
android:text="@string/bt3" />
首先是布局文件activity_main.xml
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" >
android:id="@+id/bt1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/bt1" />
android:id="@+id/bt2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/bt2" />
android:id="@+id/bt3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="@string/method"
android:text="@string/bt3" />
android:id="@+id/bt4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="@string/method"
android:text="@string/bt4" />
然后是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