2016-04-21 57 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