W działaniu powiedz MainActivity, programowo dodałem fragment powiedz Fragment_1

Ten Fragment_1 ma układ, który zawiera EditText. Kiedy zaczynam pokazywać to Fragment_1, EditText skupia się, ale soft keyboard nie jest otwarty

Więc klikam EditText, aby otworzyć keyboard, type some text i click done button, które muszą zastąpić Fragment_1 Fragment_2, który zawiera również EditText.

Ale to EditText w Fragment_2 nie jest focused, ale keyboard nadal jest open (może być z powodu ostatniego Fragment_1)

Więc dodałem to dla Fragment_2

EditText.requestFocus();

Fokus jest tam, a klawiatura jest otwarta, ale EditText nie jest wypełniany przez klawisze, które klikam.

Dlaczego tak jest?

Dziękuję Ci.

0
Archie.bpgc 28 wrzesień 2012, 15:44

2 odpowiedzi

Najlepsza odpowiedź

Powinieneś ukryć klawiaturę dla pierwszej edycji tekstu na pierwszym fragmencie

private InputMethodManager mInputMethodManager = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
EditText.clearFocus();
mInputMethodManager.hideSoftInputFromWindow(EditText.getWindowToken(), 0);

I wtedy powinieneś poprosić o fokus i pokazać klawiaturę do drugiej edycji tekstu:

EditText.requestFocus();
mInputMethodManager.showSoftInput(EditText, 0);
1
Pasha 28 wrzesień 2012, 15:59

Menedżer metod wprowadzania ignoruje żądania klawiatury, chyba że EditText i okno, w którym się znajduje, mają fokus. Tak więc po wprowadzeniu Activity / Dialog musisz poczekać, aż fokus się uspokoi, zanim poprosisz o klawiaturę. Możesz to zrobić, wywołując usługę InputMethodManager w OnFocusChangeListener, ale Widoki mogą uzyskać fokus przed samo Okno, więc musisz poczekać na fokus okna. Nie ma sposobu, aby dodać OnFocusChangeListener do samego obiektu Window, ale nasłuchiwanie fokusa Widoku i publikowanie Runnable wydaje się działać.

Proszę spojrzeć na piękną analizę tutaj

0
nidhi_adiga 28 luty 2014, 14:25