Редактируемый Android Spinner плюс виртуальная клавиатура - это возможно? - PullRequest
1 голос
/ 08 сентября 2011

У меня есть AlertDialog с редактируемым Spinner, который позволяет мне редактировать выбранное значение, но есть проблема.Элемент управления редактирования в моем Spinner принимает фокус после нажатия, и если устройство имеет физическую клавиатуру, все в порядке.Но если нет клавиатуры ...

Виртуальная клавиатура никогда не появляется в этом диалоговом окне.Даже если я заставлю клавиатуру открываться после показа диалогов (без открытия списка вращающихся устройств), она появляется только в фоновом режиме и ее невозможно использовать.

Можно ли создать такой диалог со счетчиком и записатьв его поле редактирования со стандартной виртуальной клавиатурой?Как?

Мой код выглядит примерно так:

final AlertDialog.Builder alertb = new AlertDialog.Builder( this );
alertb.setPositiveButton( "OK", new DialogInterface.OnClickListener() ...
alertb.setNegativeButton( "Cancel", new DialogInterface.OnClickListener() ...

final AlertDialog alert = alertb.create();
final Spinner inputSpinner = new Spinner(this);
ArrayList<String> names = new ArrayList<String>();
//... (filling 'names' here) ...
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.editforspinner, names);
adapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item );
inputSpinner.setAdapter( adapter );
inputSpinner.setSelection( 0 );
alert.setView( inputSpinner, 4, 4, 4, 4 );
alert.show();

XML-файл с именем editforspinner:

<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/spinnerTarget"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>

Я нажимаю на клавиатуре такой код:

inputSpinner.postDelayed( new Runnable() {
    @Override
    public void run() {
        InputMethodManager imm = (InputMethodManager) getSystemService( Context.INPUT_METHOD_SERVICE );
        imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_NOT_ALWAYS);
    } }, 2000 );
...