2017-01-20 56 views
0

我有這個View Pager有一組頁面。當用戶在第一頁上時,彈出鍵盤。當我滑過頁面時,鍵盤沒有關閉(這是如何實現的)。現在當我在第四或第五頁時,我明確嘗試使用下面的一段代碼關閉鍵盤,但它不起作用。有些東西告訴我,這是因爲鍵盤是在單獨的頁面上打開的(通過不同的片段)。如何以編程方式關閉不屬於當前窗口的鍵盤

InputMethodManager imm = (InputMethodManager)Context.GetSystemService(Activity.InputMethodService); 
View v = ((Activity)context).CurrentFocus; 
if (v == null) 
    return; 
imm.HideSoftInputFromWindow(WindowToken, 0); 

windowtoken在這裏如何映射。我想它是用來共同關聯打開鍵盤的視圖窗口。但是並不是所有頁面中的頁面都顯示在同一窗口中,本質上具有相同的標記。如果是這樣,爲什麼它不工作

+0

你試過在清單中嗎? –

回答

0

檢查此方法。在我的應用程序中,這也是在viewpager也工作正常。

public void hideKeyboard(Activity activity) { 
     // Check if no view has focus: 
     View view = activity.getCurrentFocus(); 
     if (view != null) { 
      InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); 
      inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 
     } 
    } 

我希望它對你有用。

+0

我已經試過了。這是行不通的。我目前沒有任何關注的焦點。 – Dibzmania

+0

@Dibzmania plz chk此鏈接http://stackoverflow.com/a/21402632/1223291 – dipali

0

雖然我們可以切換輸入。這裏使用 -

public static void toggle(Activity activity){ 
    InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE); 
    if (imm.isActive()){ 
     // Hide keyboard 
     imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0); 
    } else { 
     // Show keyboard 
     imm.toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY); 
    } 
} 
0

通過使用Interface方法實施。

Interface類的創建方法:

public interface ShowHideKeyboard(){ 
     void showKeyBoard(); 
     void hideKeyBoard(); 
} 

Activity實現Interface類:

public class YourActivity extends AppCompactActivity implements ShowHideKeyboard{ 

@Override 
public void hideKeyBoard() { 
    View view = this.getActivity().getCurrentFocus(); 
    if (view != null) { 
     view.clearFocus(); 
     InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
     imm.hideSoftInputFromWindow(view.getWindowToken(), 0); 
    } 
    } 

@Override 
public void showKeyboard() { 
    ((InputMethodManager) 
      (getActivity()) 
      .getSystemService(Context.INPUT_METHOD_SERVICE)) 
      .toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); 
} 

} 

呼叫showKeyBoard()和要顯示或隱藏片段hideKeyBoard()方法。

((ShowHideKeyBoard) getActivity()).showKeyBoard(); 
((ShowHideKeyBoard) getActivity()).hideKeyBoard(); 
+0

這並不回答我的問題。你基本上已經顯示了我所做的,只是以一種奇特的方式 – Dibzmania

+0

無論你需要什麼,你都必須逐頁呼叫隱藏/顯示方法。 –

相關問題