Почему IME в моем приложении для Android отсоединяется от EditText, который он должен редактировать? - PullRequest
0 голосов
/ 24 декабря 2010

У меня есть приложение для 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, как только он всплывает?

1 Ответ

0 голосов
/ 24 декабря 2010
       passwordBox.setFocusableInTouchMode(true);

Надеюсь, это сработает. Есть ли это?

...