Ho un FragmentActivity
utilizzando un ViewPager
per servire diversi frammenti. Ciascuno è una ListFragment
con la seguente disposizione:Come nascondere la tastiera virtuale all'interno di un frammento?
<?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>
All'avvio dell'attività, spettacoli tastiera virtuale. Per rimediare a questo, ho fatto il seguente all'interno del frammento:
@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);
}
risparmio il parametro di ingresso ViewGroup container
da onCreateView
come un modo per accedere il token finestra per l'attività principale. Questo funziona senza errori, ma la tastiera non viene nascosta dalla chiamata a hideSoftInputFromWindow
in onStart
.
Originariamente, ho provato utilizzando il layout gonfiata anziché container
, cioè:
imm.hideSoftInputFromWindow(myInflatedLayout.getWindowToken(), 0);
ma questo ha gettato un NullPointerException
, presumibilmente perché il frammento stesso non è un'attività e non hanno una finestra unico token ?
C'è un modo per nascondere la tastiera virtuale all'interno di un frammento oppure devo creare un metodo nello FragmentActivity
e richiamarlo dal frammento?
ho aggiunto questo al mio project.but quando clicco su un'altra scheda si blocca. –
Per coloro che stanno facendo questo e ottenendo un arresto anomalo con NullPointerException, è sufficiente utilizzare InputMethodManager all'interno del metodo frammento onCreateView. In questo modo, avrai la tua vista e potrai cambiare l'ultima linea usando la vista che hai gonfiato su imm.hideSoftInputFromWindow (view.getWindowToken(), 0); – Aurasphere