https://developer.android.com/reference/android/view/View.OnClickListener.html#
https://blog.csdn.net/jamesli6/article/details/52189006
这个类这一个方法;
使用:
在view对象,及其子类对象都有这个方法:他的参数就是OnclickListener的对象。注意不止button。
setOnClickListener(View.OnClickListener l)
Register a callback to be invoked(调用) when this view is clicked.
Interface definition for a callback to be invoked when a view is clicked.
Public methods
onClick
void onClick (View v)
Called when a view has been clicked.
Parameters | |
---|---|
v |
View : The view that was clicked. |
使用
- 首先为要实现监听的对象绑定监听器,例如为一个Button对象绑定一个监听器
botton.setOnClickListener();
。 - 然后在
setOnClickListener()
方法中定义一个OnClickListener的匿名内部类,然后重写内部类中的onClick方法。 - 最后在onClick方法中实现监听事件要实现的逻辑即可。
优点有:
1.可以在当前类中复用该监听器类
2.可以自由访问外部类的所有界面组件
- b1.setOnClickListener(new OnClickListener(){
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- Intent intet = new Intent(MainActivity.this,seekbar.class);
- startActivity(intet);
- //finish();
- }
- });
- 首先要自定义一个外部类,实现OnClickListener接口,并重写onClick方法,在onClick方法中可以定义这个外部类想实现的处理逻辑,那么调用这个外部类实现监听事件时,都可以用super来调用这个类中的处理逻辑。这也是使用外部类实现监听事件的优势所在:可以将不同监听事件中大量重复的处理逻辑定义在这个类中,然后使用这个外部类实现监听事件时都可以使用super关键字来直接调用,而不用重复定义,减少重复代码,提高代码质量。
- 为要实现监听的对象绑定监听器,然后在setOnClickListener()方法中使用我们自定义的外部类来实现监听事件。
- 重写onClick方法,并根据需要来决定是否需要使用super调用父类处理逻辑,并在onClick方法中定义自己的处理逻辑。
比较少见,其中优点为:
1.当某个事件监听器被多个GUI界面共享,且主要是完成某种业务逻辑的实现
其中确定为:
1.不利于提高程序的内聚性
2.不能自由访问创建GUI界面类的组件,编程不够简洁
这个类很简单,实现OnClickListener并复写onClick方法即可,外部类监听点击事件实际中用的不多,但如果以后做到好几十个按钮点下
去要产生相同的动画效果,就可以把动画效果放到外部内里面
- Button buttonup=(Button)findViewById(R.id.btn_signup);
- buttonin.setOnClickListener(new MyOnClicklistener() {
- public void onClick(View v) {
- //noinspection ConstantConditions
- super.onClick(v);
- Toast.makeText(MainActivity.this,"点击了登录",Toast.LENGTH_LONG).show();
- }
- });
- buttonup.setOnClickListener(new MyOnClicklistener() {
- public void onClick(View v) {
- //noinspection ConstantConditions
- super.onClick(v);
- Toast.makeText(MainActivity.this,"点击了注册",Toast.LENGTH_LONG).show();
- }
- });
- class MyOnClicklistener implements View.OnClickListener {
- public void onClick(View v) {
- //让所有使用当前外部类的点击事件的按钮都要做出一个动作,改变button本身
- v.setAlpha(0.5f);
- }
可以直接在Activity中定义事件处理方法
其中优点为:非常简洁
缺点为:
1.这种形式可能造成程序结构混乱。Activity的主要职责应该是完成界面初始化;但此时还需包含事件处理器方法,从而引起混乱
2.如果activity界面类需要实现监听器接口,让人感觉比较怪异
- public class ActivityListener extends Activity implements OnClickListener {
- private EditText show;
- private Button bn;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- show = (EditText)findViewById(R.id.show);
- bn = (Button)findViewById(R.id.bn);
- bn.setOnClickListener(this);
- }
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- show.setText("按钮被单击了!");
- }
4.直接绑定到标签
在布局中要发送事件源中定义一个:
android:onClick="clickHandler"
然后在该布局对应的Activity定义一个 void clickHandler(void source)方法
5.多个按钮,用view.id来区别,只要传view就可以;
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main_dialog);
- b1=(Button)findViewById(R.id.button1);
- b2=(Button)findViewById(R.id.button2);
- b3=(Button)findViewById(R.id.button3);
- b4=(Button)findViewById(R.id.button4);
- b5=(Button)findViewById(R.id.button5);
- b1.setOnClickListener(new ButtonListener());
- b2.setOnClickListener(new ButtonListener());
- b3.setOnClickListener(new ButtonListener());
- b4.setOnClickListener(new ButtonListener());
- b5.setOnClickListener(new ButtonListener());
- }
- private class ButtonListener implements OnClickListener{
- public void onClick(View v) {
- switch(v.getId()){
- case R.id.button1:
- ……
- break;
- case R.id.button2:
- ……
- break;
- default:
- break;
- }
- }
- }
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener ,View.OnClickListener{
private Spinner spinner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Spinner spinner = (Spinner) findViewById(R.id.spinner);
// Create an ArrayAdapter using the string array and a default spinner layout
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
R.array.planets_array, android.R.layout.simple_spinner_item);
// Specify the layout to use when the list of choices appears
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// Apply the adapter to the spinner
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(this);
spinner.setOnClickListener(this);
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
@Override
public void onClick(View v) {
}
}