将两个不同的onKeyListener设置为同一视图-Android

将两个不同的onKeyListener设置为同一视图-Android,android,events,keylistener,Android,Events,Keylistener,如何将2 onKeyListener设置为同一视图 例如,如果我有一个EditText et,我想要 et.setOnKeyListener(onKeyListener1) et.setOnKeyListener(onKeyListener2) 有什么办法可以做到这一点吗?不太可能。。。这是一个集合方法,不是加法。您可以尝试通过回调或类似的方式从您的keylistener发送一些信息。不太可能,但是,您可以试试这个, 针对单击时需要执行的操作编写3种不同的方法 public void oncli

如何将2 onKeyListener设置为同一视图

例如,如果我有一个EditText et,我想要

et.setOnKeyListener(onKeyListener1)

et.setOnKeyListener(onKeyListener2)


有什么办法可以做到这一点吗?

不太可能。。。这是一个集合方法,不是加法。您可以尝试通过回调或类似的方式从您的keylistener发送一些信息。

不太可能,但是,您可以试试这个, 针对单击时需要执行的操作编写3种不同的方法

public void onclick1 (){
 // your code
}

public void onclick2 (){
 // your code
}

public void onclickMain (View v){
 // your code
}
使用onclickmain作为XML部件上的onclick事件,如下所示

android:onclick="onclickMain"
然后在onclickMain上,您可以使用if条件来选择需要触发的内容


我希望这能起作用,

您不能将两个OnKeyListener设置为同一个EditText

现在,我不确定您的特殊EditText中还有哪些附加功能,但也许您可以实现View.OnKeyListener来实现您想要的:

public class CommonOnKeyListener implements View.OnKeyListener{
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        /*
         *  Here, insert the code that is common to all your EditTexts
         */
        return false;
    }
}
然后,您可以定义第二个OnKeyListener,该OnKeyListener扩展CommonKeyListener,并为特定的EditText执行一些额外的工作:

public class CustomOnKeyListener extends CommonOnKeyListener{
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        /* Make a call to the parent class's onKey method 
         * so you can reuse the functionality in your CommonOnKeyListener 
         */

        boolean result = super.onKey(v, keyCode, event);

        /*
         *  Your additional code goes here (e.g. for your special EditText)
         */

        return false;
    }
}
View.OnKeyListener listener1 = new CommonOnKeyListener();
View.OnKeyListener listener2 = new CustomOnKeyListener();

// Set the key listeners to the appropriate EditTexts

yourEditText1.setOnKeyListener(listener1);
yourEditText2.setOnKeyListener(listener1);
yourSpecialEditText.setOnKeyListner(listener2);
现在,所有EditText都可以使用CommonOnKeyListener,并且可以将CustomOnKeyListener设置为特殊的EditText:

public class CustomOnKeyListener extends CommonOnKeyListener{
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        /* Make a call to the parent class's onKey method 
         * so you can reuse the functionality in your CommonOnKeyListener 
         */

        boolean result = super.onKey(v, keyCode, event);

        /*
         *  Your additional code goes here (e.g. for your special EditText)
         */

        return false;
    }
}
View.OnKeyListener listener1 = new CommonOnKeyListener();
View.OnKeyListener listener2 = new CustomOnKeyListener();

// Set the key listeners to the appropriate EditTexts

yourEditText1.setOnKeyListener(listener1);
yourEditText2.setOnKeyListener(listener1);
yourSpecialEditText.setOnKeyListner(listener2);

为什么需要有两个OnKeyListener?我会在EditText中添加一个TextWatcher,然后您可以对所有键做出反应,并且只在字符(通过参数接收)是您要对其作出反应的字符时才可以执行任何操作。我有一个用于所有编辑文本的公共键侦听器,但是,有一些额外的功能必须在其中一个编辑文本中实现。我不想重新发明轮子,做一个新的监听器,有相同的功能(还有一些额外的功能)。这就是为什么要在单独的侦听器中使用额外的功能。