SoftKeyboard не отображается для вновь отображаемого фрагмента

У меня есть FragmentActivity, который изначально отображает фрагмент с несколькими кнопками на нем. Когда вы нажимаете одну из кнопок, FragmentActivity отображает новый фрагмент с некоторыми полями editText. Кажется, я не могу отобразить клавиатуру мягкого ввода, когда будет отображаться мой новый фрагмент с полями editText.

Использование режима windowSoftInput в манифесте отключается, так как сразу отображает клавиатуру.

android:windowSoftInputMode="stateUnchanged" 

Я попытался использовать

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

но безрезультатно. Вот как я показываю новый фрагмент из своей Activity:

 public void clickHandler(View view) { switch (view.getId()) { case R.id.login: loginFragment = new LoginFragment(); FragmentTransaction transaction = getSupportFragmentManager() .beginTransaction(); transaction.replace(R.id.fragment_container, loginFragment); transaction.addToBackStack(null); transaction.commit(); getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); break; 

Я также попытался вызвать setSoftInputMode изнутри встроенного фрагмента, и это не сработало. Думаю, что это была проблема синхронизации, я попробовал ее с handler.postDelayed, и это тоже не сработало. Это выглядело так:

 onResume... Handler handler = new Handler(); Runnable runnable = new Runnable() { @Override public void run() { getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); } }; handler.postDelayed(runnable, 1000); 

Любая помощь будет оценена по достоинству. Благодарю.

Solutions Collecting From Web of "SoftKeyboard не отображается для вновь отображаемого фрагмента"

В вашем onResume вы можете сделать это:

 EditText someEditText = (EditText)getActivity().findViewById(R.id.someEditText); someEditText.requestFocus(); InputMethodManager mgr = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); mgr.showSoftInput(someEditText, InputMethodManager.SHOW_IMPLICIT); 

У меня была очень похожая проблема. Фрагмент A вызывает фрагмент B, где фрагмент B (макет с TABS) имеет в нем EditText. Клавиатура не появлялась бы в этом окне EditText, если бы я не нажал на что-то еще.

Я попробовал решение здесь и во многих других решениях stackoverflow. МНОГИЕ. Единственный, кто работал для меня, заключался в том, чтобы сфокусироваться на EditText, когда щелкнул EditText. В OnFocusChangeListener я смог заставить клавиатуру открывать и закрывать.

Эта проблема возникла только для меня на устройствах Android 2.34, а не 2.2 или 3.0. У эмулятора тоже не было проблем. В манифесте была настроена только настройка.

Итак, вот решение, которое сработало для меня (надеюсь, кто-то найдет это полезным):

В onCreateView (…)

  // //Inflate Your Layout Here // //set on focus to force keyboard editText.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { Log.d(TAG,"On Foucs. Has Focus = " + hasFocus); if (hasFocus) { //open keyboard ((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(v, InputMethodManager.SHOW_FORCED); } else { //close keyboard ((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow( v.getWindowToken(), 0); } } }); //Set on click listener to clear focus editText.setOnClickListener(new OnClickListener() { @Override public void onClick(View clickedView) { clickedView.clearFocus(); clickedView.requestFocus(); } });