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 изнутри фрагмента onCreate, и это не сработало.
Думаю, что это была проблема синхронизации, я попробовал ее с 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);
Любая помощь будет оценена.
Благодарю.
Ответы
Ответ 1
В вашем 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);
Ответ 2
У меня была очень похожая проблема. Фрагмент 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();
}
});