2012-07-26 62 views
2

我已經在我的應用程序中實現了ActionBar選項卡。但在換頁時我遇到了一個問題。我的選項卡主要包含webview,但一個選項卡包含編輯文本。 當我點擊編輯文本鍵盤出現,並與鍵盤出現,如果我改變選項卡,鍵盤不會消失。我嘗試了一些簡單的解決方案,如隱藏它,但沒有成功。鍵盤不隱藏在ActionBar選項卡更改

InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
mgr.hideSoftInputFromWindow(fragment.getView().getApplicationWindowToken(), 0); 

這個我打電話在實現ActionBar.TabListener的類的onTabSelected()。我不知道如何解決這個問題,也沒有得到相關信息。

在此先感謝。任何幫助將不勝感激。

更新和回答

埃裏克回答有些給了我一推,幫我實現了答案,所以我標誌着他的回答與我的改變是正確的。即我已經在我的onTabUnselected添加了eric的代碼,但不是在tabSelected中,因爲當時我正試圖獲取視圖,因此未創建視圖,因此視圖爲空。所以我最後的代碼是

@Override 
    public void onTabUnselected(Tab tab, FragmentTransaction ft) 
    { 
     View target = initialisedFragment.getView().findFocus(); 

     if (target != null) 
     { 
      InputMethodManager mgr = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); 
      mgr.hideSoftInputFromWindow(target.getWindowToken(), 0); 
     } 
    } 

回答

2

我不相信你可以隨便挑一個View,並以此爲窗口令牌。您必須找到當前顯示鍵盤的字段。

這是我以前用過的一個方法的端口,這是值得一試:

View target = fragment.getView().findFocus(); 
if (target != null) { 
    InputMethodManager imm = (InputMethodManager) target.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
    imm.hideSoftInputFromWindow(target.getWindowToken(), 0); 
} 

如果還是不行,有lots of other methods that have been reported to work

+0

喔,K。我沒有看到視圖,因爲通常我們會將tabHost傳遞給此視圖,但在操作欄中沒有選項卡主機。所以我更願意通過這個觀點。謝謝回覆。我正在嘗試。再次感謝。 – Android 2012-07-26 06:07:31

+0

這是行不通的,甚至你的鏈接傳遞一個editText作爲視圖。但是在這裏我沒有任何視圖,因爲fragment.getView()總是作爲null傳遞。即使在manifest中添加alwaysHidden也不起作用。不知道如何繼續...... – Android 2012-07-26 06:13:11

+0

你需要弄清楚有什麼重點。也許你可以使用getActivity()或getRootView()來獲得一個視圖,然後找到它的焦點?如果'getView()'爲null,那麼你的'Fragment'可能沒有佈局或沒有正確實例化...... – Eric 2012-07-26 17:35:15

0

我用以下,該選項可捕獲在該裝置正在工作的當前視圖:

public final void onTabReselected(Tab tab, FragmentTransaction fragmentTransaction) { 
     View focus = getCurrentFocus(); 
     if (focus != null) { 
      hiddenKeyboard(focus); 
     } 
    } 
public final void onTabselected(Tab tab, FragmentTransaction fragmentTransaction) { 
     View focus = getCurrentFocus(); 
     if (focus != null) { 
      hiddenKeyboard(focus); 
     } 
    } 
public final void onTabUnselected(Tab tab, FragmentTransaction fragmentTransaction) { 
     View focus = getCurrentFocus(); 
     if (focus != null) { 
      hiddenKeyboard(focus); 
     } 
    }