2017-04-22 17 views
0

我有一個SearchActivity可以工作,但我希望能夠通過按回來關閉它。如果我現在這樣做,首先鍵盤不見了(這是我想要的),但是如果我再按一次,我會銷燬這個片段。相反,我想關閉搜索。因爲我在一個片段中,所以我無法設置onBackPressed()通過按回車鍵關閉SearchAction在片段中

當前代碼:

@Override 
    public void onBackPressed() { 
     // Only close if the Fragment reference is null. 
     if(Ships == null) 
     { 
      super.onBackPressed(); 
     } 
     else 
     { 
      Ships.onBackPressed(); 
     } 
    } 

回答

1

如果你真的需要,你可以保持Fragment的參考,並通知onBackPressed()發生的片段。雖然這會給你你想要的結果,但這並不是最優的。

Activity

@Override 
public void onBackPressed() 
{ 
    // Only close if the Fragment reference is null. 
    if(mFragment == null) 
    { 
     super.onBackPressed(); 
    } 
    else 
    { 
     mFragment.onBackPressed(); 
    } 
} 

Fragment

MyFragment extends Fragment 
{ 
    public void onBackPressed() 
    { 
     // Execute here. 
    } 
} 
+0

除了mFragment == NULL工程。 (預計表達) – newToEverything

+0

@newToEverything你可以仔細檢查,看起來你忘記了一個'='符號。它應該是'=='。如果問題仍然存在,請讓我知道。 –

+0

添加了我在帖子中的代碼。 – newToEverything

0

覆蓋onBackPressed()

  1. If keyboard is open - 讓系統處理回的新聞發佈會上
  2. 如果SearchView目前已集中 - 然後清除焦點
  3. 否則讓系統處理回新聞事件。

    @Override 
    public void onBackPressed() { 
        final boolean isKeyboardOpen = ...; 
        if (isKeyboardOpen) { 
         super.onBackPressed(); 
        } else if (searchView.hasFocus()) { 
         searchView.clearFocus(); 
        } else super.onBackPressed(); 
    }