8

私は、2つのフラグメントを持つViewPagerを含むAndroidアプリを持っています。最初のフラグメントにはEditTextフィールドが含まれています。アプリが起動すると、そのフィールドにすぐにフォーカスが当てられ、ソフトキーボードが起動されます(これを実行します)。 2番目のフラグメントはリストのみを含んでいます(編集可能なテキストフィールドはありません)。フラグメント1からフラグメント2にスワイプすると、キーボードが消えてしまいます。私が試したことは何もないようです。キーボードは、ビューに留まるだけでなく、フラグメント1のEditTextフィールドを更新し続けます。ViewPagerのフラグメントからソフトキーボードを隠す

私は、キーボードを隠すために間違ったコードを使用しているか、または間違った場所にキーボードを置いています。誰かが正しい実装の例を投稿することができれば、非常に感謝しています!

私の最新の試みは、フラグメント1のonDetachでキーボードを非表示にするコードを配置することでした()メソッド:windowSoftInputMode =「stateHiddenを」:あなたのAndroidManifestあなたが活動宣言アンドロイドに追加すべきで

@Override 
public void onDetach() 
{ 
    super.onDetach(); 

    InputMethodManager imm = (InputMethodManager) this.context.getSystemService(Context.INPUT_METHOD_SERVICE); 

    // I'VE TRIED ALL THREE BELOW, NONE OF THEM WORK... 

     // imm.hideSoftInputFromWindow(this.messageView.getWindowToken(), 0); 
     // imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); 
     // this.context.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
} 

答えて

10

this answer.を参照してください。基本的には、ViewPagerのOnPageChangeListenerがあなたのためにキーボードを隠す必要があります。 (あなたがスワイプアニメーションが滑らかに残っているしたい場合は、onPageScrollStateChangedの代わりonPageSelectedでこれを行う。)

@Override 
public void onPageScrollStateChanged(int state) 
{ 
    if (state == ViewPager.SCROLL_STATE_IDLE) 
    { 
     if (mViewPager.getCurrentItem() == 0) 
     { 
      // Hide the keyboard. 
      ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)) 
       .hideSoftInputFromWindow(mViewPager.getWindowToken(), 0); 
     } 
    } 
} 
0

<activity 
     android:name="YourActivity"    
     android:windowSoftInputMode="stateHidden">   
</activity> 

そして、あなたのレイアウトでのEditTextの子どもたちのrequestFocusから削除:

<EditText 
    android:id="@+id/editText1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:layout_marginLeft="15dp" 
    android:ems="10" > 
    <requestFocus /> 
</EditText> 
+0

が、これはすべての時間を表示するからキーボードを防ぐことはできませんか?フラグメント2で非表示にしたいだけです。 – Jabari

+0

これにより、アクティビティにフラグメントがロードされたときにソフトキーボードが表示されなくなります。しかし、EditTextをクリックすると、ソフトキーボードが表示されます。アクティビティによって読み込まれたすべてのフラグメントに影響します。常に非表示にし、ソフトキーボードを表示しないようにするには、マニフェストでandroid:windowSoftInputModeでstateAlwaysHiddenを使用する必要があります。私の英語のために申し訳ありません。 – ClarkXP

+0

ほとんど動作しますが、別のフラグメントに切り替えるとキーボードは隠されません。 – Timmmm

0
getActivity().getWindow().setSoftInputMode(
        WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
関連する問題