Android 编辑文本单击和键盘操作事件

Android 编辑文本单击和键盘操作事件,android,Android,我想编辑文本,但只在onClick事件上编辑,一旦光标完成可见性应再次像以前一样设置为false。只有onClick事件将显示光标并编辑启用一旦完成键入并按下键盘操作按钮,它将再次使光标可见性为假 这里是Xml部分 <EditText android:id="@+id/pname" android:textStyle="bold" android:layout_toRightOf="@+id/profileimg"

我想编辑文本,但只在onClick事件上编辑,一旦光标完成可见性应再次像以前一样设置为false。只有onClick事件将显示光标并编辑启用一旦完成键入并按下键盘操作按钮,它将再次使光标可见性为假

这里是Xml部分

<EditText
            android:id="@+id/pname"
            android:textStyle="bold"
            android:layout_toRightOf="@+id/profileimg"
            android:inputType="none"
            android:layout_marginBottom="15dp"
            android:layout_alignParentBottom="true"
            android:layout_marginLeft="15dp"
            android:textAllCaps="true"
            android:cursorVisible="false"
            android:background="@android:color/transparent"
            android:hint="@string/nickname"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:maxLength="10"
            android:clickable="true"
            android:onClick="onClick"/>
问题/错误:似乎我一完成输入并按键盘操作完成键,我的活动就停止了

例外情况:

pname = (EditText) findViewById(R.id.pname);

pname.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
         pname.setInputType(0x0000006);
         pname.setCursorVisible(true);
     }
});
/*pname.setOnFocusChangeListener(new View.OnFocusChangeListener() {
     @Override
     public void onFocusChange(View v, boolean hasFocus) {
         if(hasFocus){
             pname.setCursorVisible(false);
         } else {
             pname.setCursorVisible(false);
         }
     }
});
*/

pname.setOnEditorActionListener(new EditText.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER || actionId ==EditorInfo.IME_ACTION_DONE) {
            if (!event.isShiftPressed()) {
                pname.setCursorVisible(false);
                return true; // consume.
            }
        }
        return false;
    }
});
java.lang.NullPointerException:尝试在packagename.MainActivity$2.onEditorAction(MainActivity.java:‌​69)69号线


您没有检查收到的
KeyEvent
,但文档阻止您:

KeyEvent:如果由enter键触发,则为事件;否则,该值为空

因此,您需要检查这是否为
null
,以防止出现异常


这是活动停止工作的原因。是否存在异常?我不确定我是否理解这些解释。请尝试对此进行解释。@AxelH java.lang.NullPointerException:尝试在packagename.MainActivity$2.onEditorAction(MainActivity.java:69)的空对象引用上调用虚拟方法“int android.view.KeyEvent.getKeyCode()”我写的条件和问题是我在android手机屏幕上看到的弹出窗口很不幸,你的应用程序停止工作了,明白了吗?可能是@AxelH Wow Brilliant的重复!我问我在哪里得到空值,为什么我编辑文本到它。首先正确阅读,然后回答我知道这是一个空指针异常,但在我的情况下,WHERE?????@AxelH是认真的!我知道,但为什么????我知道它没有取我的动作键,但为什么?我不知道看到这个我在这里使用了一个代码,但你先检查键,而不是动作。可能只有当
actionId==EditorInfo.IME\u ACTION\u SEARCH | actionId==EditorInfo.IME\u ACTION\u DONE
时,事件才为null。这意味着这是这样做的检查。但这不是重点。文档告诉您它可以是
null
,您会得到
NullPointerException
。。。因此,只需检查它是否为
null
,即可防止出现这种情况。你总是可以看到它发生在什么时候理解,但这不是重点耶,我放了一个特征线并调试应用程序事件为空现在告诉我如何修复我知道了,谢谢,让我试试,如果完成了,然后回来验证你的答案谢谢,做了,但在操作完成按钮点击后,它不再像发生了一样下降以前