У меня есть приложение для Android, которое я пишу. Он имеет функцию ListActivity, в которой все настроено для загрузки моих данных с использованием этого макета для каждого элемента.
Мой адаптер данных связывается без проблем, и я настроил его так, чтобы при выборе элемента из списка вызывался этот метод.
private void showPasswordBox(View v) {
EditText passwordBox = (EditText)v.findViewById(R.id.hidden_box);
Button passwordSubmit = (Button)v.findViewById(R.id.hidden_box_submit);
passwordSubmit.setText("Login");
passwordSubmit.setVisibility(View.VISIBLE);
passwordBox.setFocusableInTouchMode(true);
passwordBox.setHint(R.string.password);
passwordBox.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
passwordBox.setVisibility(View.VISIBLE);
}
Это имеет эффект отображения и EditText и Button (hidden_box и hidden_box_submit в моем макете). Что именно то, что я хотел.
Однако проблема возникает, когда пользователь нажимает на вновь видимый EditText (hidden_box). IME всплывает, и hidden_box сразу теряет фокус. Следовательно, все, что напечатано в IME, не появляется в EditText. Вместо этого он делает эту странную вещь, когда все, что напечатано, появляется над клавиатурой серыми буквами и остается в нижней части экрана, когда IME закрывается. Это как будто IME печатает в своем собственном временном невидимом поле.
Если пользователь нажимает на EditText после того, как IME уже показывает, то приложение ведет себя как следует. Все, что набрано в IME, появляется в EditText и остается, когда IME закрывается.
Мне кажется, что когда IME всплывает (что происходит сразу же, когда пользователь нажимает на EditText, как и должно быть), он полностью деассоциируется с моим приложением и выполняет свою функцию в IME la-la land, если только я направьте его в EditText, нажав на EditText, прежде чем вводить и отпускать клавиатуру. Как мне заставить его вести себя нормально, чтобы он вводился непосредственно в EditText, как только он всплывает?