2

アプリに ActionBar Tab を実装しました。しかし、タブの変更中に 1 つの問題に直面しています。私のタブには主に webview が含まれていますが、1 つのタブには編集テキストが含まれています。テキストの編集をクリックするとキーボードが表示され、タブを変更するとキーボードが表示され、キーボードが消えません。明示的に非表示にするなどの簡単な解決策をいくつか試しましたが、成功しませんでした。

InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
 mgr.hideSoftInputFromWindow(fragment.getView().getApplicationWindowToken(), 0);

これは、ActionBar.TabListener を実装するクラスの onTabSelected() で呼び出しています。この問題を解決する方法がわかりません。関連情報も得られません。

前もって感謝します。どんな助けでも大歓迎です。

更新と回答

エリックの回答は、私にプッシュを与え、回答を達成するのに役立ちました。つまり、エリックのコードをonTabUnselectedtabSelected ではなく my に追加しました。その瞬間にビューを取得しようとしたときにビューが作成されなかったため、ビューが null として取得されていました。だから私の最終的なコードは

@Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft)
    {
        View target = initialisedFragment.getView().findFocus();

        if (target != null) 
        {
            InputMethodManager mgr = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
            mgr.hideSoftInputFromWindow(target.getWindowToken(), 0);
        }
    }
4

2 に答える 2

2

Viewを選択してウィンドウトークンとして使用できるとは思いません。現在キーボードが表示されているフィールドを見つける必要があります。

これは私が以前に使用した方法の移植版です。試してみる価値があります。

View target = fragment.getView().findFocus();
if (target != null) {
    InputMethodManager imm = (InputMethodManager) target.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(target.getWindowToken(), 0);
}

それが機能しない場合は、機能することが報告されている他の方法がたくさんあります

于 2012-07-26T06:01:47.780 に答える
0

次のオプションを使用して、デバイスが動作している現在のビューをキャプチャします。

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);
        }
    }
于 2014-01-28T10:03:35.380 に答える