RequestFocus не работает должным образом для EditText

Много времени было потрачено на решение проблемы, и это выглядит просто, но я действительно устал и не смог найти решение. У меня есть Activity, активность имеет 4 компонента EditText, у 2 из которых есть всплывающее меню (AlertDialog), которые содержат список, следующий – отключен для редактирования, а последний – доступен для редактирования и должен показывать мягкую клавиатуру, когда пользователь Нажимая на него.

Кроме того, у моего root LinearLayout есть LinearLayout, которые содержат внутри RelativeLayout. Последнее необходимо для AdvBanner. Последний LinearLayout (RelativeLayout) выровнен по нижней части корневого макета.

Часть XML, которая описывает это:

<LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="bottom" android:focusable="false" android:focusableInTouchMode="false" android:gravity="bottom"> <RelativeLayout android:id="@+id/AdvLayoutReserveArea" android:layout_width="fill_parent" android:layout_height="50dp" android:background="#FFFFFF" android:focusable="false" android:focusableInTouchMode="false" android:gravity="bottom" /> </LinearLayout> 

Когда действие запускается, редактируемый EditText фокусируется на GREEN- границе, и курсор мигает. Через несколько секунд загружается и отображается AdvBanner. Когда это произойдет, редактируемый EditText потерял фокус. С этого момента моя жизнь будет похожа на кошмар.

Давайте посмотрим шаг за шагом.

Проблема 1. Если в ЭТОМ МОМЕНТЕ (когда Adv загружен и появляется) пользователь редактирует поле EditText с помощью мягкой клавиатуры, фокус теряется, граница имеет серый цвет, и если пользователь продолжает вводить текст, то нет результата – символы Не печатается (CURSOR в EditText слишком утерян).

Я ДУМАЮ, что любой пользователь будет раздражен – когда вы вводите текст, а курсор неактивен, потому что в фоновом режиме загружается какой-то совет, и он фокусируется на себе.

Чтобы решить эту проблему, в методе, когда загружен Adv (показан), я пытаюсь вернуть фокус вручную в EditText методом requestFocus.

 public void onAdLoaded() { // TODO Auto-generated method stub // add app specific code for this event here... // called when an ad is successfully displayed on device CountEdit1.requestFocus(); } 

Да, курсор возвращается в поле EditText, и если мягкая клавиатура активна, пользователь все равно может печатать текст, но граница поля EditText остается GREY …

ПРИМЕЧАНИЕ: на самом деле я не уверен в различии между границей GREEN и GREY сфокусированным EditText .. GREEN обычно используется, когда пользователь нажимает на него, и GREY, возможно, когда мы хотим запросить фокус вручную (с помощью requestFocus () и т. Д. )

Задача 2. (В результате задачи сольватации №1). После того, как мягкая клавиатура была закрыта, если пользователь нажимает на редактируемое поле EditText, он принимает фокус и курсор появляется внутри, но не реагирует на показ мягкой клавиатуры! Нажатие на него не показывает мягкую клавиатуру, но выглядит как поле редактирования в режиме копирования – когда пользователь может выбрать текст и вырезать / скопировать его в буфер обмена.

Моя цель проста для первого взгляда. Я просто хочу СОХРАНИТЬ курсор и сфокусироваться на редактируемое поле EditText (CountEdit1), пока отображается мягкая клавиатура, и пользователь вводит текст. И нормальная реакция, когда пользователь нажимает EditText – как обычно, просто покажите мне мягкую клавиатуру!

Здесь я читал все вопросы, я комбинировал разные методы (clearFocus, requestFocusFromTouch и т. Д.), Просто не хватает времени и пространства, чтобы описать все, что я пытался сделать, чтобы решить эту проблему. Основные проблемы описаны выше.

Надеюсь на помощь и решение проблемы … Спасибо заранее.

Цель решена, обходной путь проще, чем я думал. Проблема №2 фиксируется с помощью метода onClick (). Достаточное условие появления мягкой клавиатуры, использующей методы clearFocus () и requestFocus ().

  CountEdit1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { CountEdit1.clearFocus(); CountEdit1.requestFocus(); } }); 

Мягкая клавиатура появляется, когда пользователь нажимает на поле EditText. Исправлена.

Работает на меня:

 InputMethodManager mgr = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); editField.requestFocus(); mgr.showSoftInput(editField, InputMethodManager.SHOW_IMPLICIT); 
 userInput.post(new Runnable() { public void run() { userIdInput.requestFocus(); } }); 

Пойдите на этом и скажите, если ваша проблема еще не решена.

Вы должны запросить фокус после того, как представление создано в фрагменте или активности:

 @Override public void onViewCreated(View view, Bundle savedInstanceState) { CountEdit1.requestFocus(); } 

попробуй это:

 public void onAdLoaded() { final Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { CountEdit1.requestFocus(); InputMethodManager mgr = (InputMethodManager) base.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); mgr.showSoftInput(CountEdit1, InputMethodManager.SHOW_IMPLICIT); CountEdit1.setSelection(CountEdit1.getText().length()); } },0); }