5

Ich habe ein Fragment mit einem einzigen EditText, das die Soft-Tastatur benötigt, um kontinuierlich geöffnet zu bleiben. Die Tastatur wird ausgeblendet, wenn der Bildschirm gedreht wird. Ich rufe showSoftInput in OnActivityCreated auf, was nach der Rotation ausgeführt wird, aber es zeigt nicht die Tastatur an.showSoftInput funktioniert nicht nach der Änderung der Orientierung

InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.showSoftInput(edit, 0); 

Hinweis: Ich möchte toggleSoftInput nicht verwenden. Ich habe das ausprobiert, aber es endet in einigen Fällen das Schließen der Tastatur. Und es gibt keine Möglichkeit, android zu fragen, ob die Tastatur bereits geöffnet ist.

Antwort

7

Es scheint, dass showSoftInput mit Fragmenten sehr fehlerhaft ist.

Zuerst versuchen @ TronicZomB Lösung. Es funktioniert für eine Aktivität mit einem einzelnen Fragment.

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); 

jedoch für eine Aktivität mit verschachtelten FragmentTransactions, werden Sie toggleSoftInput mit dem SHOW_FORCED und HIDE_NOT_ALWAYS Parameter zu verwenden, gezwungen werden. HIDE_NOT_ALWAYS verhindert, dass der Toggle-Befehl die bereits geöffnete Tastatur nach einer Orientierungsänderung schließt.

imm.hideSoftInputFromWindow(activity.findViewById(android.R.id.content).getWindowToken(), 0); 
1

Versuchen Sie, die InputMethodManager mit folgenden ersetzen:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); 
+0

ich folgend in onCreate bereits tun:

InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_NOT_ALWAYS); 

Um die Tastatur zu einem späteren Zeitpunkt zu verbergen, können Sie verwenden. getSherlockActivity() getWindow() setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE. | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); – bgolson

+0

Ihre Methode funktioniert für eine einfache Aktivität mit einem einzelnen Fragment. Wenn die Aktivität jedoch zu mehreren Fragmenten "verarbeitet" wurde (Aktivität-> AddFragment-> ReplaceFragment), funktioniert sie nicht mehr. – bgolson

Verwandte Themen