`
gryphone
  • 浏览: 433722 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Button.setOnClickListener(OnClickListener l) 原理

 
阅读更多

使用Button 可能都会监听之 当其被点击 就会有函数负责回调 那么其到底是怎么实现的呢?

 

今天要做的就是摸清楚之 为了减少不必要的麻烦 打算extends EditText 并在其上设立监听器

 

 

[代码 步骤]

1. 定义Edit2Text 且extends EditText

public class Edit2Text extends EditText {
	OnTextChangedListener changedListener;
	
	TextWatcher tWatcher;
}

 

 

 

2. 定义其上的监听器:OnTextChangedListener 并定义函数:onChanged() 用于执行具体回调

public static interface OnTextChangedListener {
		public void onChanged(Edit2Text e2t, String text);
		
	}

 

需要注意的 这几行代码的修饰关键字:

1. static :使其能够脱离Edit2Text而存在

2. interface : 使其自动填充其内部函数

3. “void onChanged(Edit2Text e2t, String text)” 中的第一个参数e2t 用于做分别 具体奥妙 后面再细说

 

 

3.  设定监听器

public void setOnChangedListener(OnTextChangedListener l){
		changedListener = l;
	}

 

 

4. 定义TextWatcher 当字符内容改变 通知监听器

 

* 定义TextWatcher'

tWatcher = new TextWatcher(){

			@Override
			public void afterTextChanged(Editable s) {
				// TODO Auto-generated method stub
				
			}

			@Override
			public void beforeTextChanged(CharSequence s, int start, int count,
					int after) {
				// TODO Auto-generated method stub
				
			}

			@Override
			public void onTextChanged(CharSequence s, int start, int before,
					int count) {
				// TODO Auto-generated method stub
				updateText(s.toString());
			}
			
		};
		
		this.addTextChangedListener(tWatcher);

 

 

* 通知监听器

private void updateText(String s){
		changedListener.onChanged(this, s);
	}

 

 

5. 如何使用

public class Edit2TextTest extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Edit2Text e2t = new Edit2Text(this);
        setContentView(e2t);
        
        e2t.setOnChangedListener(new Edit2Text.OnTextChangedListener(){

			@Override
			public void onChanged(Edit2Text e2t, String text) {
				// TODO Auto-generated method stub
				Log.d("TAG","[String:]"+text);
			}
        	
        });
    }
}

 

 

6. emulator 运行截图:

 

*

 

* Log 信息:

D/dalvikvm(  674): GC freed 223 objects / 8848 bytes in 108m
D/TAG     (  941): [String:]i am
D/TAG     (  941): [String:]i am
D/TAG     (  941): [String:]i am e
D/TAG     (  941): [String:]i am ed
D/TAG     (  941): [String:]i am edi
D/TAG     (  941): [String:]i am edit
D/TAG     (  941): [String:]i am edit2
D/TAG     (  941): [String:]i am edit2t
D/TAG     (  941): [String:]i am edit2te
D/TAG     (  941): [String:]i am edit2tex
D/TAG     (  941): [String:]i am edit2text
D/TAG     (  941): [String:]i am edit2text,
D/TAG     (  941): [String:]i am edit2text,
D/TAG     (  941): [String:]i am edit2text, h
D/TAG     (  941): [String:]i am edit2text, he
D/TAG     (  941): [String:]i am edit2text, hel
D/TAG     (  941): [String:]i am edit2text, hell
D/TAG     (  941): [String:]i am edit2text, hello
D/TAG     (  941): [String:]i am edit2text, hello!

 

分享到:
评论

相关推荐

    简单计算器

    button5.setOnClickListener(operator5_1); button6.setOnClickListener(operator6); // caculateService =new CaculateService(); serviceIntent=new Intent(ActivityDemo.this,CaculateService.class); ...

    Android OnClickListener监听接口用法范例.rar

     button.setOnClickListener(//为按钮对象添加OnClickListener接口实现  //OnClickListener为View的内部接口,其实现者负责监听鼠标点击事件  new View.OnClickListener(){  public void onClick(View v){  ...

    如何呈现按钮(Button)之

    Buttonbtn=(Button)findViewById(R.id.button); Buttonbtn2=(Button)findViewById(R.id.button2); btn.setOnClickListener(listener); btn2.setOnClickListener(listener2);} OnClickListenerlistener=new ...

    多个Button监听源码

    button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 在这里处理点击事件 } }); ``` 如果你有多个Button需要监听,可以为每个Button创建一个单独的监听器,但...

    限制button在3秒内不可重复点击

    button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { button.setOnClickListener(null); // 取消监听 // 执行业务逻辑 new Handler().postDelayed(() -> { ...

    ex07_1_button.rar_android

    myButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 在这里编写按钮被点击时执行的代码 } }); ``` 或者使用lambda表达式简化代码: ```java myButton....

    带有进度条的button.zip

    button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { button.showProgress(); // 显示进度条 // 开始执行耗时操作 new Thread(new Runnable() { @Override ...

    QuizActivity

    QuizActivity 的Android源码,仅供参考。... import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View... mFalseButton.setOnClickListener(new View.OnClickListener() {

    带有进度条的button.zip项目安卓应用源码下载

    progressButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { progressBar.setVisibility(View.VISIBLE); new Thread(new Runnable() { @Override public void ...

    android mars视频代码 download源码

    button1.setOnClickListener(new DownTextListener()); button2.setOnClickListener(new DownMP3Listener()); } class DownTextListener implements OnClickListener{ @Override public void onClick(View v) ...

    android listview 分页显示

    cl = new Button.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.btnLeft: leftView(); break; case R.id.btnRight: ...

    实现加减乘除等简单计算的Android计算器源码包

    fuhao[6].setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub str=""; et.setText(str); vi=v; } }); fuhao[7].setOnClickListener...

    android Button防止多次点击

    button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { button.setEnabled(false); // 执行操作 // ... button.setEnabled(true); } }); ``` 2. **使用...

    OnClickListener 的两种实现方法

    button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 在这里处理点击事件 Toast.makeText(MainActivity.this, "Button clicked", Toast.LENGTH_SHORT).show();...

    android实现打电话功能

    button.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { String mobile = mobileText.getText().toString(); //拔打电话号码 //"android.intent.action.CALL" ...

    android简单计算器

    btPoint.setOnClickListener(new OnClickListener() { public void onClick(View arg0) { String str1=etResult.getText().toString(); if(str1.equals("")){ etResult.setText(""); }else{ ...

    Mar老师android视频源代码

    downloadMp3Button.setOnClickListener(new DownloadMp3Listener()); } class DownloadTxtListener implements OnClickListener{ public void onClick(View v) { HttpDownloader httpDownloader = new ...

    Android换肤Demo

    public class MyBtnListener implements OnClickListener{ private final int layout_id; public MyBtnListener(int layout) { layout_id = layout; } @Override public void onClick(View v) { ...

    页面跳转OnClickListener

    btnTo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "我被点击了 2", Toast.LENGTH_LONG).show(); } }); ``` 3. 使用已有...

    android为ListView每个Item上面的按钮添加事件

    holder.viewBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showInfo(position); } }); return convertView; } ``` 在`onClick()`方法中,我们调用了`...

Global site tag (gtag.js) - Google Analytics