Android中点击事件的监听共有四种方式:
布局文件代码:
<?xml version="1.0"encoding="utf-8"?>
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="点我"
/>
</RelativeLayout>
第一种:内部类
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity{
TextViewtext;
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.click);
//找到文本控件
text=(TextView)findViewById(R.id.text);
//添加点击事件
text.setOnClickListener(newMyListener());
}
privateclass MyListener implements OnClickListener{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this,"我被点击",0).show();
}
}
}
第二种:匿名内部类
public class MainActivity extends Activity{
TextViewtext;
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.click);
//找到文本控件
text=(TextView)findViewById(R.id.text);
//添加点击事件
text.setOnClickListener(newOnClickListener() {
@Override
publicvoid onClick(View v) {
Toast.makeText(MainActivity.this,"我被点了",0).show();
}
});
}
}
第三种:实现接口
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activityimplements OnClickListener{
TextViewtext;
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.click);
//找到文本控件
text=(TextView)findViewById(R.id.text);
//添加点击事件
text.setOnClickListener(this);
}
@Override
publicvoid onClick(View v) {
Toast.makeText(this,"我被点了",0).show();
}
}
第四种:
在布局文件中添加点击事件对应的方法,当前布局文件代码为:
<?xml version="1.0"encoding="utf-8"?>
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="点我"
android:onClick="click"
/>
</RelativeLayout>
Java源文件代码为:
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity{
TextViewtext;
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.click);
//找到文本控件
text=(TextView)findViewById(R.id.text);
}
private void click(View v){
Toast.makeText(this,"我被点了",0).show();
}
}
此时运行Android项目,点击点我按钮,无任何响应;不是我们的代码有问题,而是,TextView控件默认是未获得焦点的,当我们将他换为Button事件就会得到响应。
public class MainActivity extends Activity{
Buttontext;
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.btn);
//找到文本控件
text=(Button)findViewById(R.id.btn);
}
publicvoid btnclick(View v){
Toast.makeText(this,"我被点了",0).show();
}
}
此时的代码,会是点击事件得到响应,但注意,事件响应方法的,访问权限修饰符,为public最为合适。
补充:
当我们在开发时我们需要判断用户是否在EditText上输入内容,当我们使用user_name.getText().toString().trim();来获得在Edittext上输入的内容进行判断是否为null,或为””,时来进行响应的时间响应是,是判断不了得,无效的,
这时我们可以通过
//匿名内部类,的添加监听的方式
login_btn.setOnClickListener(new OnClickListener() {
@Override
publicvoid onClick(View v) {
Stringstr=user_name.getText().toString().trim();
if(user_name.length()==0){
Toast.makeText(MainActivity.this,"xxxx",0).show();
}else{
Toast.makeText(MainActivity.this,str,0).show();
}
}
});
这种方式来实现,不同的状态的事件响应