首先要使用一个Button和一个TextView便于测试和分析下面是布局文件代码:
<RelativeLayout 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.android.onclick.MainActivity$PlaceholderFragment" >
<TextView
android:id="@+id/tvtext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/text" />
<Button
android:id="@+id/btntest"
android:onClick="testBtnOnClick"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/tvtext"
android:text="@string/test"/>
</RelativeLayout>
布局文件写好后显示的效果
第1种:在布局文件里面绑定一个点击事件的方法(这是一个很好用的方法)
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
//获取控件
private TextView tvtext;
private Button btntest;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btntest=(Button)findViewById(R.id.btntest);
}
//方法名要与布局页面中方法名相同
public void testBtnOnClick(View view){
TextView textview = (TextView)findViewById(R.id.tvtext);
textview.setText("你点击了测试按钮");
}
}
第1种测试结果如下:
第2种:创建一个内部类定义点击事件(当然要把布局文件里的Onclick事件去掉,否则会因为你没有方法而报错)
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
//获取控件
private TextView tvtext;
private Button btntest;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btntest=(Button)findViewById(R.id.btntest);
//给按钮注册点击事件 ,创建一个内部类定义点击事件
btntest.setOnClickListener(new MyListener());
}
private class MyListener implements OnClickListener{
@Override
public void onClick(View v){
TextView textview = (TextView)findViewById(R.id.tvtext);
textview.setText("恭喜触发成功");
}
}
}
第2种测试结果如下:
第3种:采用匿名内部类创建点击事件(这种用法用的不是很多)
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
//获取控件
private TextView tvtext;
private Button btntest;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btntest=(Button)findViewById(R.id.btntest);
//采用匿名内部类创建点击事件
btntest.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
TextView textview = (TextView)findViewById(R.id.tvtext);
textview.setText("触发成功咯!");
}
});
}
}
第3种测试结果如下:
第4种:让activity实现点击事件接口(这个也是最常用的方法)
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity implements OnClickListener {
//获取控件
private TextView tvtext;
private Button btntest;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btntest=(Button)findViewById(R.id.btntest);
//让activity实现点击事件接口
btntest.setOnClickListener(this);
}
//接口里面未实现的方法
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.btntest:
TextView textview = (TextView)findViewById(R.id.tvtext);
textview.setText("成功触发");
break;
}
}
}
第4种测试结果如下: