android创建自己的监听接口

android创建自己的监听接口

 

第一步:创建接口和方法

public interfaceOnUsernameAvailableListener {

       public abstract voidonAvailableChecked(String username, boolean available);  //使用abstract method 必须实现具体方法,在这里可以不适用抽象方法

}

 

第二步:定义变量保存listener

OnUsernameAvailableListeneronUsernameAvailableListener = null;

 

第三步:提供方法允许用户设置Listener

// Allows the userto set an Listener and react to the event

public voidsetOnUsernameAvailableListener(OnUsernameAvailableListener listener) {

       onUsernameAvailableListener = listener;

}

 

第四步:提供方法允许用户获得Listener

public finalOnUsernameAvailableListener getOnUsernameAvailableListener() {

       return onUsernameAvailableListener;

}

 

第五步:添加方法,此方法每次在监听事件被触发的时候调用

private voidOnUserChecked(String username, boolean available){

       if(onUsernameAvailableListener!=null) {

              if(myif = true){

                     onUsernameAvailableListener.onAvailableChecked(username,available);

              }

       }

}

完成。

 

附完整代码:

packagecom.tseng.examples;

 

importcom.tseng.examples.CheckUsernameEditText.OnUsernameAvailableListener;

importandroid.app.Activity;

importandroid.graphics.Color;

importandroid.os.Bundle;

importandroid.view.View;

importandroid.view.View.OnClickListener;

importandroid.widget.Button;

importandroid.widget.EditText;

importandroid.widget.TextView;

 

public classRegisterExample extends Activity {

       // Declare our Views, so we can accessthem later

       private CheckUsernameEditText etUsername;

       private EditText etPassword;

       private EditText etPassword2;

       private Button btnRegister;

       private Button btnCancel;

       private TextView lblUserStatus;

 

    /** Called when the activity is firstcreated. */

    @Override

    public void onCreate(Bundle savedInstanceState){

        super.onCreate(savedInstanceState);

 

        // Set Activity Layout

        setContentView(R.layout.main);

 

        // Get the EditText and ButtonReferences

        etUsername =(CheckUsernameEditText)findViewById(R.id.username);

        etPassword =(EditText)findViewById(R.id.password);

        etPassword2 =(EditText)findViewById(R.id.password2);

        btnRegister =(Button)findViewById(R.id.register_button);

        btnCancel =(Button)findViewById(R.id.cancel_button);

        lblUserStatus =(TextView)findViewById(R.id.userstatus);

 

        // Set our new Listener to the UsernameEditText view

       etUsername.setOnUsernameAvailableListener(newOnUsernameAvailableListener(){

                     @Override

                     public voidonAvailableChecked(String username, boolean available) {

                            // Handle the eventhere

                            if(!available){

                                   etUsername.setTextColor(Color.RED);

                                   lblUserStatus.setText(username+ " is already taken. Please choose another login name.");

                            } else {

                                   etUsername.setTextColor(Color.GREEN);

                                   lblUserStatus.setText(username+ " is available.");

                            }

                     }

        });

 

        // Set Click Listener

        btnRegister.setOnClickListener(newOnClickListener() {

                     @Override

                     public void onClick(View v){

                            // create Account

                     }

              });

        btnCancel.setOnClickListener(newOnClickListener() {

                     @Override

                     public void onClick(View v){

                            // Close theapplication

                            finish();

                     }

              });

    }

}

 

 

packagecom.tseng.examples;

 

importjava.lang.reflect.Array;

 

import android.content.Context;

importandroid.text.TextUtils;

importandroid.util.AttributeSet;

importandroid.view.KeyEvent;

importandroid.view.View;

importandroid.view.View.OnKeyListener;

importandroid.widget.EditText;

importandroid.widget.TextView;

 

public classCheckUsernameEditText extends EditText implements OnKeyListener {

       OnUsernameAvailableListeneronUsernameAvailableListener = null;

       final private static String[]registeredUsers = new String[] {

              // This is just a fixed List fortutorial purposes

              //in a real application you'd check this server sided or inside the database

              "tseng",

              "admin",

              "root",

              "joedoe",

              "john"

       };

 

       public CheckUsernameEditText(Contextcontext) {

              super(context);

              // Set KeyListener to ourself

              this.setOnKeyListener(this);

       }

       public CheckUsernameEditText(Contextcontext, AttributeSet attrs, int defStyle) {

              super(context, attrs, defStyle);

              // Set KeyListener to ourself

              this.setOnKeyListener(this);

       }

       public CheckUsernameEditText(Contextcontext, AttributeSet attrs) {

              super(context, attrs);

              // Set KeyListener to ourself

              this.setOnKeyListener(this);

       }

 

       // Allows the user to set an Listener andreact to the event

       public voidsetOnUsernameAvailableListener(OnUsernameAvailableListener listener) {

              onUsernameAvailableListener =listener;

       }

       //This function is called after the check was complete

       privatevoid OnUserChecked(String username, boolean available){

              //Check if the Listener was set, otherwise we'll get an Exception when we try tocall it

              if(onUsernameAvailableListener!=null){

                     //Only trigger the event, when we have a username

                     if(!TextUtils.isEmpty(username)){

                            onUsernameAvailableListener.onAvailableChecked(username,available);

                     }

              }

       }

       @Override

       public boolean onKey(View v, int keycode,KeyEvent keyevent) {

              // We only want to handleACTION_UP events, when user releases a key

              if(keyevent.getAction()==KeyEvent.ACTION_DOWN)

                     return false;

 

              boolean available = true;

 

              // Whenever a user press a key,check if the username is available

              String username =getText().toString().toLowerCase();

              if(!TextUtils.isEmpty(username)){

                     // Only perform check, ifwe have anything inside the EditText box

                     for(int i=0;i<registeredUsers.length; i++) {

                            if(registeredUsers[i].equals(username)){

                                   available =false;

                                   // Finish theloop, as the name is already taken

                                   break;

                            }

                     }

                     // Trigger the Event and notify the user of our widget

                     OnUserChecked(username,available);

                     return false;

              }

              return false;

       }

       // Defineour custom Listener interface

       publicinterface OnUsernameAvailableListener {

              publicabstract void onAvailableChecked(String username, boolean available);

       }

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值