ViewPager
を使用していくつかのフラグメントに対応するFragmentActivity
があります。それぞれは、以下のレイアウトでListFragment
である:フラグメントの中からソフトキーボードを隠すには?
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="8dp">
<ListView android:id="@id/android:list"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<EditText android:id="@+id/entertext"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
活動を開始すると、ソフトキーボードを示しています。この問題を解決するために、私は、フラグメント内で次のようでした:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//Save the container view so we can access the window token
viewContainer = container;
//get the input method manager service
imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
. . .
}
@Override
public void onStart() {
super.onStart();
//Hide the soft keyboard
imm.hideSoftInputFromWindow(viewContainer.getWindowToken(), 0);
}
私がメインの活動のためのウィンドウ・トークンにアクセスするための方法としてonCreateView
からの着信ViewGroup container
パラメータを保存します。これはエラーなく実行されますが、hideSoftInputFromWindow
への呼び出しからキーボードが隠されることはありません。onStart
。
はもともと、私が膨張したレイアウトの代わりcontainer
、すなわち使用してみました:
imm.hideSoftInputFromWindow(myInflatedLayout.getWindowToken(), 0);
をしかし、フラグメント自体は活動ではなく、独自のウィンドウ・トークンを持っていないと思われるので、これは、NullPointerException
を投げました?
フラグメント内からソフトキーボードを隠す方法はありますか、またはFragmentActivity
にメソッドを作成してフラグメント内から呼び出す必要がありますか?
私はこれを私のプロジェクトに追加しました。しかし、別のタブをクリックすると、クラッシュしています。 –
これを行い、NullPointerExceptionでクラッシュする人は、フラグメントonCreateViewメソッドの中でInputMethodManagerを使用してください。そうすることで、あなたはあなたのビューを持ち、imm.hideSoftInputFromWindow(view.getWindowToken()、0)に膨らませたビューを使って最後の行を変更することができます。 – Aurasphere