6

編集:私は自分自身を明確にしていないようです。必要なのは、現在のフラグメントを置き換えるたびにソフトキーボードを非表示にする方法です。これを行うにはどうすればよいですか?

これを簡単にさせてください。Tab Fragment 1.2 に EditText ボックスがあり、これを押すと明らかにソフト キーボードが開きます。タブが変更されたときにこれを非表示にするにはどうすればよいですか? onTabSelected() で次のことを試しましたが、何もしていないようです

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

私は今すべてを試しました。これまでに見つけた提案された解決策は、まったく役に立ちません。

4

5 に答える 5

12

デバイスの画面上のアクティブなアクティビティのビューをキャプチャして、プログラムで使用できます。

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

private void hiddenKeyboard(View v) {
        InputMethodManager keyboard = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        keyboard.hideSoftInputFromWindow(v.getWindowToken(), 0);
    }
于 2014-01-28T10:12:40.220 に答える
6

FragmentTransaction.replace()同じ問題が発生し、メソッドを使用してタブを変更する直前に、次のコードをタブ フラグメントに配置しました。各フラグメントのメソッドonCreateonCreateViewメソッドは、最初のタブ選択後にトリガーされないため、特定のフラグメントのクラスに到達する前にキーボードを非表示にすることができます。を使用するのmTabHost.getApplicationWindowToken()ではなくeditText.getWindowToken()、大きな助けになりました。それを見つけた人に感謝します。すみません、リンクを失くしてしまいました。

InputMethodManager im = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);             
im.hideSoftInputFromWindow(mTabHost.getApplicationWindowToken(), 0);

.......
fm = getFragmentManager();
....

fm.beginTransaction()
    .replace(placeholder, new someFragment(), tabId)
    .commit();
于 2012-07-13T19:12:37.920 に答える
2

これがソフトキーボードを有効にする方法です

inputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);

そして、これはあなたがタブを切り替えるときにそれを閉じる方法です。

InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.hideSoftInputFromWindow(editText.getWindowToken(), 0);
于 2012-04-24T12:03:16.273 に答える
2

ViewPager にフラグメントを追加する mainActivity の viewpager に OnPageChangeListener を設定します

  viewPager.setOnPageChangeListener(myOnPageChangeListener);




   ViewPager.OnPageChangeListener myOnPageChangeListener =
            new ViewPager.OnPageChangeListener() {

            @Override
            public void onPageScrollStateChanged(int state) {
                //Called when the scroll state changes.

            }

            @Override
            public void onPageScrolled(int position,
                                       float positionOffset, int positionOffsetPixels) {
                //This method will be invoked when the current page is scrolled,
                //either as part of a programmatically initiated smooth scroll
                //or a user initiated touch scroll.

                hideKeyboard();
            }

            @Override
            public void onPageSelected(int position) {
                //This method will be invoked when a new page becomes selected.
                //hide keyboard when any fragment of this class has been detached
                hideKeyboard();
            }
        };







public  void hideKeyboard() {
    InputMethodManager inputManager = (InputMethodManager)getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);

    // check if no view has focus:
    View v = getCurrentFocus();
    if (v == null)
        return;

    inputManager.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
于 2016-08-16T06:52:47.033 に答える
-2

XMLファイルではandroid:focusable="true"、どこからでも削除するだけです。

もう1つ使用している場合は<requestfocus></requestfocus>、この行も削除してください。

それを試してみてください私はそれがうまくいくはずだと思います。

于 2012-04-24T12:14:32.263 に答える