android 12 click事件的不同实现方式
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/btnLogin" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="登陆" android:onClick="onClick"/> <Button android:id="@+id/btnExit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="退出" android:onClick="onClick"/> </RelativeLayout>
1 继承:
package com.sxt.day03_04; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Toast; activity:写逻辑代码地方,自动创建,不能自己去new,第一个调用onCreate方法, public class MainActivity extends Activity implements OnClickListener{ @Override protected void onCreate(Bundle savedInstanceState) { //savedInstanceState用于保存Activity中的数据,是一个hashMap, super.onCreate(savedInstanceState); //将activity_main.xml设置为本Activity显示的布局 //R代表res文件夹,只要res文件夹中有id值的控件都会在R中创建一个常量, setContentView(R.layout.activity_main); //将MainActivity.this地址保存在Button.OnClickListener属性中 //点击的时候执行this这个监听器的onClick方法 findViewById(R.id.btnLogin).setOnClickListener(this); findViewById(R.id.btnExit).setOnClickListener(this); } @Override public void onClick(View v) {//View是所有布局的基类 switch (v.getId()) { case R.id.btnLogin: Toast.makeText(this, "执行登陆操作", 2000).show(); break; case R.id.btnExit: finish(); break; } } }
2 内部有名类:
package com.sxt.day03_05; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Toast; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //将MainActivity.this地址保存在Button.mOnClickListener属性中 //用内部类(内部有名类,不是匿名类)实现,如果很多类都用LoginClickListener这个对象则有很好的复用性 findViewById(R.id.btnLogin).setOnClickListener(new LoginClickListener()); } class LoginClickListener implements OnClickListener{ @Override public void onClick(View v) { if(v.getId()==R.id.btnLogin){ Toast.makeText(MainActivity.this, "执行登陆操作", 2000).show(); } } } }
3 外部类
package com.sxt.day03_06; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { EditText metId,metPwd;//用户名 密码 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); setListener();//设置按钮的点击事件监听器 } private void setListener() { MyClickListener listener=new MyClickListener(metId, metPwd, this); findViewById(R.id.btnLogin).setOnClickListener(listener); findViewById(R.id.btnExit).setOnClickListener(listener); } private void initView() { metId=(EditText) findViewById(R.id.etId); metPwd=(EditText) findViewById(R.id.etPwd); } }
package com.sxt.day03_06; import android.view.View; import android.view.View.OnClickListener; import android.widget.EditText; import android.widget.Toast; public class MyClickListener implements OnClickListener { EditText metId,metPwd; MainActivity mActivity; public MyClickListener(EditText metId, EditText metPwd, MainActivity mActivity) { super(); this.metId = metId; this.metPwd = metPwd; this.mActivity = mActivity; } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btnExit: mActivity.finish();//关闭Mainactivity break; case R.id.btnLogin: //取出登陆编号 String id=metId.getText().toString(); String pwd=metPwd.getText().toString(); Toast.makeText(mActivity, "登陆编号:"+id+",登陆密码:"+pwd, Toast.LENGTH_LONG).show(); break; } } }