23

私はタブ付きのViewPager + ActionBarを持っています。別のタブに「スワイプ」したときに、ソフトキーボードを非表示にしたいのですが、どうしたらいいか分かりません。ViewPager.OnPageChangeListener onPageSelected()でソフトキーボードをプログラムで非表示にする?

私はので、私は

activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 

を呼び出すことができますFragmentPageAdapterのコンストラクタへの私の活動に渡されました。しかし、それは何もしない(と、それは、コードの到達可能エリア内にあります)...助けて?あなたの活動で

+0

/*ソフトキーボードを隠す*一行に/ \t :。 '(。(InputMethodManager)getActivity()getSystemService(Context.INPUT_METHOD_SERVICE))hideSoftInputFromWindow(view.getWindowToken()、0);' –

答えて

35

、次の操作を行うことができます。私はスワイプアニメーションを非表示キーボードアニメーションネジのでonPageSelected()を使用していない

mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
    @Override 
    public void onPageSelected(int position) { 
     final InputMethodManager imm = (InputMethodManager)getSystemService(
      Context.INPUT_METHOD_SERVICE); 
     imm.hideSoftInputFromWindow(mView.getWindowToken(), 0); 
    } 

    @Override 
    public void onPageScrolled(int position, float offset, int offsetPixels) { 
    } 

    @Override 
    public void onPageScrollStateChanged(int state) { 
    } 
}); 
+5

おかげで、それが働きました。私はビューとしてviewPagerを使用し、activity.getSystemServiceを実行しなければなりませんでしたが、プロセスは機能しました – snotyak

+1

One Line: '((InputMethodManager)getActivity()。getSystemService(Context.INPUT_METHOD_SERVICE))。hideSoftInputFromWindow(view.getWindowToken()、 0); ' –

+2

ビューをビューページャーに設定して、ビューを見つけずに使用できるようにすることができます:imm.hideSoftInputFromWindow(mViewPager.getWindowToken()、0); – TacoEater

30

。次のフラグメントの活動のための私の場合は

InputMethodManager imm = (InputMethodManager)  
getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); 
+2

もっと良い解決策、アニメーションの不具合はありません。あなたにタンク! – azendh

+1

この回答は受け入れられた回答よりも優れています。ありがとう。 – Murat

5

一般的な方法:

private void hideVirturalKeyboard(){ 
View v = getCurrentFocus(); 
if (v != null && v instanceof EditText) { 
InputMethodManager mgr = (InputMethodManager)(v.getContext().getSystemService(Context.INPUT_METHOD_SERVIC 
E)); 
mgr.hideSoftInputFromWindow(v.getWindowToken(), 0); 
} 
} 
1

簡単な方法の代わりにonPageScrollStateChanged()を使用しています。

((CommentActivity)getActivity()).pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
    @Override 
    public void onPageSelected(int position) { 
     final InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
     imm.hideSoftInputFromWindow(txtComment.getWindowToken(), 0); 
    } 

    @Override 
    public void onPageScrolled(int position, float offset, int offsetPixels) { 
    } 

    @Override 
    public void onPageScrollStateChanged(int state) { 
    } 
}); 

UPDATE: これは、キーパッドがCommentFragmentでのEditTextのために表示されるとしたい場合には二つの断片(CommentFragment、AnotherFragment)はViewPager

public class CommentActivity extends FragmentActivity { 
    ViewPager pager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     pager = (ViewPager) findViewById(R.id.viewPager); 
     ....... 
     ....... 
    } 

    private class MyPagerAdapter extends FragmentPagerAdapter { 

     public MyPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int pos) { 
      switch(pos) { 
       case 0: return CommentFragment.newInstance(); 
       default: return AnotherFragment.newInstance(); 
      } 
     } 

     @Override 
     public int getCount() { 
      return 2; 
     }  
    } 

} 

で開かれているから、私の断片で活動しましたAnotherFragmentに切り替えて、切り替え時にキーパッドを非表示にしたい

public class CommentFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     ......... 
     ......... 
     ......... 
     ((CommentActivity)getActivity()).pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 

     @Override 
     public void onPageSelected(int position) { 
      final InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.hideSoftInputFromWindow(txtComment.getWindowToken(), 0); 
     } 

     @Override 
     public void onPageScrolled(int position, float offset, int offsetPixels) { 
     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 
     } 
    }); 
} 
1

正常に動作している:

@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); 
     } 
    } 
} 
関連する問題