Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Edittext onFocusChangeListener在不需要时调用_Android - Fatal编程技术网

Android Edittext onFocusChangeListener在不需要时调用

Android Edittext onFocusChangeListener在不需要时调用,android,Android,我目前正试图为我的应用程序提供一个直观的界面 我有一个oncreate功能,可以在加载时激活键盘,效果很好 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.add_popup); reminder = (CheckBox)findViewById(R.id.reminder_option); a

我目前正试图为我的应用程序提供一个直观的界面

我有一个oncreate功能,可以在加载时激活键盘,效果很好

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.add_popup);
    reminder = (CheckBox)findViewById(R.id.reminder_option);
    addTask();
    taskField = (EditText)findViewById(R.id.task_name);
    taskField.setHorizontallyScrolling(true);
    taskField.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean focus) {
            if (focus) {
                getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
            }
        }
    });
    taskField.requestFocus();
单击复选框时,键盘将被关闭

if(checked){
                imm.hideSoftInputFromWindow(taskField.getWindowToken(), 2);
                dateTitle.setVisibility(View.VISIBLE);
                dateSelector.setVisibility(View.VISIBLE);
                timeTitle.setVisibility(View.VISIBLE);
                timeSelector.setVisibility(View.VISIBLE);
                datetimesperator.setVisibility(View.VISIBLE);
我使用了两个内部类,一个TimePickerFragment和一个DatePickerFragment,它们都实现了onDate/TimesetListener

现在的问题是,当从弹出窗口设置时间或日期时,键盘会重新激活

我试图从中找到解决方案

当布局设置为focusable以从edittext中移除焦点时,我在if checked语句中添加了以下代码。 RelativeLayout布局=(RelativeLayout)findViewById(R.id.add_容器); layout.requestFocus()

但是,在设置日期或时间后,在相应的对话框中,尽管焦点已从edittext元素移开,键盘仍处于激活状态


退出DatePickerDialog或TimePickerDialog时,如何防止键盘被激活?

关注EditText是个棘手的问题。据我所知,没有真正的方法可以阻止编辑文本自动获得焦点。你请求关注相对人的方法似乎是解决这个问题的最佳方法——即使这不是一个好的解决方案,但感觉更像是一个解决办法


我的建议是:如果可能的话,尽量避免这种情况,试着完成你需要做的事情,例如使用ClickListeners,因为在这些情况下,你不必自动处理视图。但是,如果没有其他解决方案,您必须意识到,每当不应该接收焦点的视图可以获得焦点时,您必须请求将焦点放在相对位置上。您的代码没有显示如何处理对话框,因此我无法直接帮助您,但在这里您可以找到有关对话框的所有信息:

谢谢您的回复,您的建议帮助我找到了解决方案,我意识到我基本上只需要键盘在第一次创建时出现,然后就再也不需要了。因此我使用了:imm=(InputMethodManager)getSystemService(Context.INPUT\u METHOD\u SERVICE);在oncreate方法中,删除了焦点侦听器