2016-08-02 62 views
1

在片段上,我有以下OnKeyListener。我用它來隱藏該片段的內部視圖(如果它當前顯示的話)。如果它沒有顯示,我不會消耗按鍵和Android的。隱藏軟鍵盤後OnKeyListener停止工作

getView().setOnKeyListener(new View.OnKeyListener() { 
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      if ((keyCode == KeyEvent.KEYCODE_BACK) && (event.getAction() == KeyEvent.ACTION_DOWN)) { 
       if (isSomeViewShowing) { 
        hideSomeView(); 
        return true; 
       } 
       // Back pressed but view is not showing. Not consuming the event. 
       return false; 
      } 
      // Back not pressed. Not consuming the event. 
      return false; 
     } 
    }); 

它可以很好地隱藏視圖,並進入正常的片段/活動堆棧中時的觀點是不存在的,但如果用戶使用軟鍵盤輸入文本在一個EditText,然後隱藏它停止工作鍵盤。

我知道OnKeyListener不適用於軟鍵盤,而且這對我的需要也是可以的。我只需要聽者在輸入完成並隱藏鍵盤後繼續工作。

有沒有辦法阻止這種情況發生?

解決方法是將listen for when keyboard is dismissed添加到OnKeyListener,當鍵盤被解散時,但實現這會增加一個簡單任務的複雜度。

回答

2

您可以覆蓋在activityonBackPressed()它是使用fragment,並將它們發送消息到fragment知道鍵回到被按下。事情是這樣的:

活動:

/** 
* Triggered when the user press back button 
*/ 
@Override 
public void onBackPressed(){ 

    mYourFragment.onBackPressed(); 

} 

片段:

public void onBackPressed(){ 

    if (isSomeViewShowing) { 
     hideSomeView(); 
    } 

} 
+0

謝謝。我已經在其他片段上做了這個,但我不喜歡在沒有修改Activity的情況下不能實現它們。無論如何,我會這樣做,因爲它似乎是真正解決問題的唯一解決方案。 – buzoherbert