zoukankan      html  css  js  c++  java
  • OnclickListener

    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

    added in API level 1
    void onClick (View v)

    Called when a view has been clicked.

    Parameters
    v View: The view that was clicked.

    使用

     

    1. 使用匿名内部类的方式实现监听事件

    使用方法:

    1. 首先为要实现监听的对象绑定监听器,例如为一个Button对象绑定一个监听器botton.setOnClickListener();
    2. 然后在setOnClickListener()方法中定义一个OnClickListener的匿名内部类,然后重写内部类中的onClick方法。
    3. 最后在onClick方法中实现监听事件要实现的逻辑即可。

    优点有:

    1.可以在当前类中复用该监听器类

       2.可以自由访问外部类的所有界面组件

    [java] view plain copy
     
    1. b1.setOnClickListener(new OnClickListener(){  
    2.   
    3.             @Override  
    4.             public void onClick(View v) {  
    5.                 // TODO Auto-generated method stub  
    6.                 Intent intet = new Intent(MainActivity.this,seekbar.class);  
    7.                 startActivity(intet);  
    8.                 //finish();  
    9.             }  
    10.               
    11.         });  



    2. 使用外部类的方式实现监听事件

    使用方法:

    1. 首先要自定义一个外部类,实现OnClickListener接口,并重写onClick方法,在onClick方法中可以定义这个外部类想实现的处理逻辑,那么调用这个外部类实现监听事件时,都可以用super来调用这个类中的处理逻辑。这也是使用外部类实现监听事件的优势所在:可以将不同监听事件中大量重复的处理逻辑定义在这个类中,然后使用这个外部类实现监听事件时都可以使用super关键字来直接调用,而不用重复定义,减少重复代码,提高代码质量。
    2. 为要实现监听的对象绑定监听器,然后在setOnClickListener()方法中使用我们自定义的外部类来实现监听事件。
    3. 重写onClick方法,并根据需要来决定是否需要使用super调用父类处理逻辑,并在onClick方法中定义自己的处理逻辑。

    比较少见,其中优点为:

    1.当某个事件监听器被多个GUI界面共享,且主要是完成某种业务逻辑的实现

    其中确定为:

    1.不利于提高程序的内聚性

    2.不能自由访问创建GUI界面类的组件,编程不够简洁

    这个类很简单,实现OnClickListener并复写onClick方法即可,外部类监听点击事件实际中用的不多,但如果以后做到好几十个按钮点下

    去要产生相同的动画效果,就可以把动画效果放到外部内里面

    [java] view plain copy
     
    1. Button buttonup=(Button)findViewById(R.id.btn_signup);  
    2. buttonin.setOnClickListener(new MyOnClicklistener() {  
    3.     public void onClick(View v) {  
    4.             //noinspection ConstantConditions  
    5.                 super.onClick(v);  
    6.                 Toast.makeText(MainActivity.this,"点击了登录",Toast.LENGTH_LONG).show();  
    7.    
    8.    
    9.             }  
    10.         });  
    11.    
    12. buttonup.setOnClickListener(new MyOnClicklistener() {  
    13.     public void onClick(View v) {  
    14.                 //noinspection ConstantConditions  
    15.                 super.onClick(v);  
    16.           Toast.makeText(MainActivity.this,"点击了注册",Toast.LENGTH_LONG).show();  
    17.             }  
    18.         });  
    19.    
    20. class MyOnClicklistener implements View.OnClickListener {  
    21.         public void onClick(View v) {  
    22.             //让所有使用当前外部类的点击事件的按钮都要做出一个动作,改变button本身  
    23.             v.setAlpha(0.5f);  
    24.         }  



    3. 使用接口方式实现监听事件

    可以直接在Activity中定义事件处理方法

    其中优点为:非常简洁

    缺点为:

    1.这种形式可能造成程序结构混乱。Activity的主要职责应该是完成界面初始化;但此时还需包含事件处理器方法,从而引起混乱

    2.如果activity界面类需要实现监听器接口,让人感觉比较怪异

    [java] view plain copy
     
    1. public class ActivityListener extends Activity implements OnClickListener {  
    2.     private EditText show;  
    3.     private Button bn;  
    4.       
    5.     @Override  
    6.     protected void onCreate(Bundle savedInstanceState) {  
    7.         super.onCreate(savedInstanceState);  
    8.         setContentView(R.layout.main);  
    9.         show = (EditText)findViewById(R.id.show);  
    10.         bn = (Button)findViewById(R.id.bn);  
    11.         bn.setOnClickListener(this);  
    12.     }  
    13.   
    14.     @Override  
    15.     public void onClick(View v) {  
    16.         // TODO Auto-generated method stub  
    17.         show.setText("按钮被单击了!");  
    18.     }  



    4.直接绑定到标签

    在布局中要发送事件源中定义一个:

    android:onClick="clickHandler"

    然后在该布局对应的Activity定义一个 void clickHandler(void source)方法

    5.多个按钮,用view.id来区别,只要传view就可以;

    1. super.onCreate(savedInstanceState);  
    2.     setContentView(R.layout.activity_main_dialog);  
    3.    
    4.     b1=(Button)findViewById(R.id.button1);  
    5.     b2=(Button)findViewById(R.id.button2);  
    6.     b3=(Button)findViewById(R.id.button3);  
    7.     b4=(Button)findViewById(R.id.button4);  
    8.     b5=(Button)findViewById(R.id.button5);  
    9.   
    10.     b1.setOnClickListener(new ButtonListener());  
    11.     b2.setOnClickListener(new ButtonListener());  
    12.     b3.setOnClickListener(new ButtonListener());  
    13.     b4.setOnClickListener(new ButtonListener());  
    14.     b5.setOnClickListener(new ButtonListener());  
    15.   
    16. }  
    17.   
    18. private class ButtonListener implements OnClickListener{  
    19.   
    20.     public void onClick(View v) {  
    21.         switch(v.getId()){  
    22.         case R.id.button1:  
    23.                 ……  
    24.                 break;  
    25.         case R.id.button2:                    
    26.             ……  
    27.             break;  
    28.             default:  
    29.             break;  
    30.         }  
    31.     }  
    32.        
    33. }  
    34.    
     像spinner也可以这样区别:
    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) {

    }
    }
  • 相关阅读:
    平衡二叉查找树——AVL树
    Java 输入输出(一)——流
    C++获取系统当前时间(精确到微秒)
    C++ STL中哈希表 hash_map介绍
    ubuntu下面编译libuv
    linux使用select实现精确定时器详解
    .dll,.lib,.def 和 .exp文件
    没有core文件时候如何定位segment/core dump
    C++中string、char *、char[]的转换
    map自定义结构体作为key
  • 原文地址:https://www.cnblogs.com/BlueFire-py/p/8639730.html
Copyright © 2011-2022 走看看