适用于edittext的Android java两个监听器

时间:2014-04-11 16:57:32

标签: java android sqlite android-edittext

你可以同时拥有两个听众吗?

我有两个EditText,定义如下

   <EditText
        android:id="@+id/editTextnum"
        android:layout_width="0sp"
        android:layout_height="50dp"
        android:paddingLeft="10dp"
        android:imeOptions="actionDone"
        android:background="@drawable/back"
        android:textSize="30dp"
        android:ems="10" 
        android:textColor="#000000"
        android:layout_weight="1" 
        android:inputType="number">

   <EditText
       android:id="@+id/editTextnum2"
       android:layout_width="0sp"
       android:layout_height="50dp"
       android:paddingLeft="10dp"
       android:layout_weight="1"
       android:background="@drawable/back"
       android:ems="10"
       android:imeOptions="actionDone"
       android:inputType="number"
       android:textColor="#000000"
       android:textSize="30dp">

当我获得任何一个焦点时,它会弹出一个软数字小键盘,这样我就可以输入一个数字,然后按完成。在关注EditTexnum 2

的同时按下完成后运行以下代码
//Listner and result in MainActivity.java
db = new DBAdapter(this);
        editText = (EditText) findViewById(R.id.editTextnum2);
        editText.setOnEditorActionListener(new OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId,
                    KeyEvent event) {
                    if (actionId == EditorInfo.IME_ACTION_DONE) {
                    EditText mEdit = (EditText)findViewById(R.id.editTextnum2);
                    if(mEdit.length()==0){
                        Toast.makeText(getBaseContext(), "No Fault Reference Number Entered", Toast.LENGTH_LONG).show();
                    }
                    else{
                        db.open();  
                        Cursor c = db.getAsset2(mEdit.getText());
                        if (c.moveToFirst())        
                            DisplayContact(c);
                        else
                            Toast.makeText(getBaseContext(), "No Fault Reference found", Toast.LENGTH_LONG).show();
                               }                        
                        db.close(); 

这适用于editTextnum2但editTextnum不会做任何事情因为没有监听器

我已经尝试过复制文本并更改了监听器,但它正在投掷错误

基本上我正在做的是他们是搜索sqlite数据库的搜索框,但他们搜索两个不同的列

知道我是怎么做到的吗?

任何帮助表示赞赏

标记

2 个答案:

答案 0 :(得分:1)

editText = (EditText) findViewById(R.id.editTextnum2);

您将editText绑定到R.id.editTextnum2

确保将其绑定为

的其他文本框
another_editText_var = (EditText) findViewById(R.id.editTextnum);

并将监听器注册为another_editText_var.setOnEditorActionListener(..)

答案 1 :(得分:0)

不是......完全确定你想要实现的目标,但设置两个监听器取决于它是什么样的监听器。 edittext可以有多个TextWatcher侦听器。像这样

    EditText edit = (EditText) findViewById(R.id.editTextnum);

    edit.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // 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 afterTextChanged(Editable s) {
            // TODO Auto-generated method stub

        }
    });

    edit.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // 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 afterTextChanged(Editable s) {
            // TODO Auto-generated method stub

        }
    });

将调用两个侦听器。