26

タブ付きのViewPager+ActionBarがあります。別のタブに「スワイプ」したときにソフトキーボードを非表示にしたいのですが、その方法がわかりません。

アクティビティをFragmentPageAdapterのコンストラクターに渡したので、呼び出すことができます

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

しかし、それは何もしません(そしてそれはコードの到達可能な領域にあります)...助けますか?

4

5 に答える 5

43

あなたの活動では、次のことができます。

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) {
    }
});
于 2012-08-05T18:31:59.457 に答える
33

onPageSelected()キーボードの非表示のアニメーションがスワイプアニメーションにねじ込まれているため、使用しません。代わりに:を使用してonPageScrollStateChanged()ください

@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);
        }
    }
}
于 2012-09-14T10:43:23.703 に答える
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);
}
} 
于 2013-02-10T13:15:46.620 に答える
1

簡単な方法:

InputMethodManager imm = (InputMethodManager)    
getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
于 2013-10-11T07:37:59.877 に答える
1

私の場合、フラグメントアクティビティの場合、以下は正常に機能しています。

((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) {
     }
});

更新: これは、2つのフラグメント(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;
        }       
    }

}

CommentFragmentのEditTextにキーパッドが表示されていて、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) {
         }
   });
}
于 2014-02-06T08:39:17.960 に答える