Mam do FragmentActivitypodania ViewPagerkilku fragmentów. Każdy ma ListFragmentnastępujący układ:
<?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>
Podczas rozpoczynania działania wyświetlana jest klawiatura programowa. Aby temu zaradzić, wewnątrz fragmentu wykonałem następujące czynności:
@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);
}
Zapisuję ViewGroup containerparametr przychodzący z onCreateViewjako sposób na dostęp do tokena okna dla głównej czynności. To działa bez błędu, ale klawiatura nie zostanie ukryte przed wywołaniem hideSoftInputFromWindoww onStart.
Pierwotnie próbowałem użyć zawyżonego układu zamiast container, tj .:
imm.hideSoftInputFromWindow(myInflatedLayout.getWindowToken(), 0);
ale to wyrzuciło NullPointerException, prawdopodobnie dlatego, że sam fragment nie jest działaniem i nie ma unikalnego tokenu okna?
Czy istnieje sposób na ukrycie klawiatury programowej przed fragmentem, czy też powinienem utworzyć metodę w FragmentActivityi wywołać ją z wnętrza fragmentu?