2016-04-21 56 views
1

我有一个EditText,它附带有一个ListPopupWindow,并附有最近列出的搜索查询。当用户点击EditText时,弹出窗口应该显示,然后当用户开始输入时,弹出窗口应该消失。如何在继续使用时使用EditText onClick方法

这主要是使用OnFocusChangeListener,OnTextChangedListenerOnEditorActionListener。但是,如果用户点击EditText,开始键入,然后再次点击EditText,我需要弹出窗口回来。我曾尝试使用OnClickListener而不是OnFocusChangeListener,但无法使用OnClickListener显示弹出窗口。

如何让ListPopUpWindow显示使用时点击EditText是否已经有焦点?

searchBox.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
    public void onFocusChange(View v, boolean gainFocus) { 
     //onFocus 
     if (gainFocus) { 
      popUpWindow.show(); 
     } 
    } 
}); 

要关闭一旦用户开始输入弹出的EditText上现场

searchBox.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 

    } 

    @Override 
    public void afterTextChanged(Editable s) { 
     popUpWindow.dismiss(); 
    } 
}); 

要明确重点,解除弹出,并执行搜索

searchBox.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
     if ((actionId & v.getImeOptions()) == actionId) { 
      if (event != null && event.getAction() == KeyEvent.ACTION_DOWN) { 
       if (searchBox.getText().toString().length() == 0) return true; 
       searchBox.clearFocus(); 
       popUpWindow.dismiss(); 
       fetchResults(); 
       Util.hideKeyboard(v); 
       return true; 
      } 
     } 
     return false; 
    } 
}); 

回答

0

我发现了这个问题。事实证明,我实际上并没有使用EditText对象,而是一个名为MaterialEditText的自定义类,它提供了一个围绕EditText对象的包装,以为它提供Material UI功能。该类将我用过的侦听器传递给它的EditText成员,但是,对于OnClickListenerOnTouchListener,它没有这样做,所以这些侦听器从未被设置为EditText对象。有一次,我添加的方法传递到EditText对象,这些听众,我固定我的问题通过保持代码上面列出并添加以下内容:

searchBox.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     // Show Popup 
    } 
}); 
1

你可以尝试更换对焦变化监听器与一个触摸监听器并显示MOTION_UP事件发生时弹出:

editText.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      if ((event.getAction() == MotionEvent.ACTION_UP) { 
       // Show popup here 
      } 
      return false; 
     } 
    }); 
+0

这并没有为我工作。我也确保setFocusableInTouchMode为true。 – audiophile121