无法在 android 中使用 setKeyListener

Posted

技术标签:

【中文标题】无法在 android 中使用 setKeyListener【英文标题】:could not be able to work with setKeyListener in android 【发布时间】:2012-10-28 12:58:02 【问题描述】:

我在 EditText 中放置了一个按钮,我已将按钮设置为在主 XML 的起始代码处不可见:

RelativeLayout android:layout_
    android:layout_ android:layout_marginTop="10dp">

    <EditText android:id="@+id/editText1" android:layout_
        android:layout_ android:hint="@string/search_prompt"/>

    <Button android:id="@+id/button1" android:layout_
        android:layout_ android:layout_alignBottom="@+id/editText1"
        android:layout_alignParentRight="true" android:layout_alignParentTop="true"
        android:layout_margin="5dp" android:background="@drawable/search"
        android:onClick="loadWeather" android:visibility="invisible"/>

</RelativeLayout>

现在我希望只有在 EditText 中有一些文本时按钮才可见,如果 EditText 为空,则 Button 不应该可见,并通过以下方式在 EditText 上设置了 setKeyListener 侦听器:::

final Button searchButton = (Button) findViewById(R.id.button1);

    final EditText myEditText = (EditText) findViewById(R.id.editText1);
    myEditText.setKeyListener(new KeyListener() 

        public boolean onKeyUp(View arg0, Editable arg1, int arg2, KeyEvent arg3) 
            // TODO Auto-generated method stub
            if(!myEditText.getText().equals(""))
                searchButton.setVisibility(View.VISIBLE);
            
            return false;
        

        public boolean onKeyOther(View arg0, Editable arg1, KeyEvent arg2) 
            // TODO Auto-generated method stub
            return false;
        

        public boolean onKeyDown(View arg0, Editable arg1, int arg2, KeyEvent arg3) 
            // TODO Auto-generated method stub
            return false;
        

        public int getInputType() 
            // TODO Auto-generated method stub
            return 0;
        

        public void clearMetaKeyState(View arg0, Editable arg1, int arg2) 
            // TODO Auto-generated method stub

        
    );

它使 Button 在开始时不可见,但现在我无法在 EditText 中输入任何文本,EditText 无法通过键盘获得任何输入。请告诉mo如何摆脱这个错误。

【问题讨论】:

【参考方案1】:

改为使用

myEditText.addTextChangedListener(new TextWatcher() 
    @Override
    public void beforeTextChanged(CharSequence charSequence, int start, int count,      int after) 

    

    @Override
    public void onTextChanged(CharSequence charSequence, int start, int before, int count) 
        if( count == 0)
            searchButton.setVisibility(View.INVISIBLE);
          else
            searchButton.setVisibility(View.VISIBLE); 
        
    

    @Override
    public void afterTextChanged(Editable editable) 
        Log.v(TAG, "afterTextChanged");
    
);

【讨论】:

这段代码在添加 addTextChangedListener 的第一行给了我一个 NullPointerException。请帮忙.. 也许你忘了得到myEditTextsetContentView(R.layout.your_layout),在your_layout中用android:id="@+id/editText1"声明EditText 是的,你说得对,我忘了!现在它可以工作了,但是当我单击 Backspace 时,即使 EditText 中有一些文本,按钮也会变得不可见! 好的,我已经编辑了答案并将if(count == 0)修改为if(count == 0 &amp;&amp; myEditText.getText().length() == 0),以便相应地工作。

以上是关于无法在 android 中使用 setKeyListener的主要内容,如果未能解决你的问题,请参考以下文章

无法在带有 Kotlin 的 Android 中使用 Autodispose

无法使用 setsmallIcon 在 android studio 中更改图标

无法在 Android 中播放使用 AudioRecord 录制的 pcm 文件

地理围栏在 Android 中完全无法使用吗?

无法在 Android 中使用 AudioRecord 进行录制

无法使用 Parse 在 Android 中接收推送通知