Java 返回true时,键盘未显示在EditText上

Java 返回true时,键盘未显示在EditText上,java,android,android-edittext,Java,Android,Android Edittext,因此,我在onCreate中添加了这些行,这样当我单击或触摸编辑文本时,它就会执行doSomething中指定的操作。问题在于,使用下面显示的代码,在执行doSomething后,键盘不会显示。如果我删除If块中的return true,那么它可以工作,但我不明白如果包含这一行,为什么它不能工作。那么为什么会发生这种情况呢 @Override protected void onCreate(Bundle savedInstanceState) { super.onCrea

因此,我在
onCreate
中添加了这些行,这样当我单击或触摸编辑文本时,它就会执行
doSomething
中指定的操作。问题在于,使用下面显示的代码,在执行
doSomething
后,键盘不会显示。如果我删除If块中的
return true
,那么它可以工作,但我不明白如果包含这一行,为什么它不能工作。那么为什么会发生这种情况呢

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editText = (EditText)findViewById(R.id.editText);
        editText.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if(event.getAction() == MotionEvent.ACTION_UP) {
                    doSomething(editText);
                    return true;
                }
                return false;
            }
        });
    }

这是因为键盘将在
MotionEvent时显示。动作将由
EditText
本身处理(不是您的自定义
onTouch侦听器
),因此您的
onTouch
应该
返回false

通常,
onTouch
返回的标志通知框架您已经处理了事件-当您返回
true
时,该事件将不会进一步传播(正如已经处理的,“已消耗”)。如果返回了
false
,则事件仍将传播到此
视图(并在引擎盖下进行处理,请查看特定的源代码)或甚至传播到其父级(如果
视图的默认实现未处理此操作,并且
返回false


这不是
EditText
的情况-它正在处理所有事件,就像在第一段中一样-
ACTION\u UP
将显示键盘。但是在您的第一个命令中返回
true
,以自定义
OnTouchListener
防止
true
意味着触摸被处理。你可以从我对安卓和java还很陌生的经历中看到更多的东西,所以它并没有澄清太多。您的链接是这样的:如果侦听器已使用事件,则为True,否则为false。据我所知,我必须
返回true
才能让应用程序继续运行,否则我会认为它会卡在本文中。相反,情况正好相反。不,如果返回true,onTouch将不会继续调用超级方法。如果返回false,onTouch将继续调用超级函数。谢谢,这很有帮助。我可以编辑你的答案吗?因为这对我来说有点困难,所以我的编辑可以帮助我这个级别的其他人理解它。嗯,你总是可以的,但是必须有更多的人(版主)批准它。如果你想改变整个句子和所有的意思(甚至简化),那么你的改变将不会被接受,因为这将是你的答案,而不是我的。。。