не могу открыть клавиатуру на editText

Я объясню, что я сделал в своем alertBox. Я раздуваю представление для alertBox, его имя - представление. и в этом представлении LinearLayout есть его имя «основной макет», я раздуваю другое представление, которое содержит радиогруппы и тексты редактирования. его имя макет. я добавляю 2-й вид (макет) в первый вид (вид). и когда я нажимаю на радиокнопки, он работает правильно. но когда я нажимаю на editText, он не открывает программную клавиатуру -

я открываю alertBox, который расширяет представление. но он не показывает программную клавиатуру, когда я нажимаю EditText в alertBox.

Builder alertCreate = new AlertDialog.Builder(parent);
        alertCreate.setTitle("New Schedule");
        inflater = LayoutInflater.from(parent);
        View view = inflater.inflate(R.layout.activity_schedule, null);     
        spinnerRepeat = (Spinner)view.findViewById(R.id.spinner_schedule_repeat);

spinnerRepeat.setOnItemSelectedListener(new OnItemSelectedListener() {

            public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                LinearLayout mainLayout= (LinearLayout)view.findViewById(R.id.main_Layout);
                LinearLayout spinnerLayout = (LinearLayout)view.findViewById(R.id.spinner_Layout);
                View weeklyLayout = inflater.inflate(R.layout.schedule_week_selection, null);
                initializeWeeks(weeklyLayout);
                if(arg2>0)
                {
                    if(flag==0)
                    {
                        View layout = inflater.inflate(R.layout.schedule_ends_on, null);
                        RelativeLayout layout2 =(RelativeLayout)layout.findViewById(R.id.endsOn_layout);    
                        rgEndsOn =(RadioGroup)layout.findViewById(R.id.radioGroup_endsOn);
                        radio_occr=(RadioButton)layout.findViewById(R.id.radio_schedule_occr);
                        radio_date=(RadioButton)layout.findViewById(R.id.radio_schedule_date);
                        occurence=(TextView)layout.findViewById(R.id.tv_schedule_Occur);
                        addCheckListenerToRgEndsOn();
                        etEndsOn=(EditText)layout.findViewById(R.id.Et_schedule_occur);
                        etEndDate=(EditText)layout.findViewById(R.id.et_schedule_enddate);
                        etEndDate.setClickable(true);
                        etEndDate.setText(formatDate(TimeFormater.DateToString(startDate)));
                        mainLayout.addView(layout, 3);
                        flag=1;
                    }
                    if(arg2==2)
                    {
                        spinnerLayout.addView(weeklyLayout,2);
                    }
                    else
                    {
                        View v = (View)spinnerLayout.getChildAt(2);
                        spinnerLayout.removeView(v);
                    }
                }
                else
                {
                    Log.e("id",""+mainLayout.getChildAt(3));
                    View v = (View)mainLayout.getChildAt(3);
                    View v2 = (View)spinnerLayout.getChildAt(2);
                    spinnerLayout.removeView(v2);
                    mainLayout.removeView(v);
                    flag=0;
                }
            }

но когда я нажимаю на EditText (etEndsOn), клавиатура не появляется


person Vikky    schedule 24.04.2013    source источник


Ответы (2)


Я столкнулся с той же проблемой, что и вы... и попытался установить некоторые параметры (программно и в xml), но, похоже, это не работает.

Но есть решение, которое я реализовал, и оно работает для меня:

В методе onCreate я заполнил параметры для edittext (только ширина и высота) и вызвал метод для отображения AlertDialog:

    EditText input = new EditText(this);
    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.FILL_PARENT,
            LinearLayout.LayoutParams.FILL_PARENT);
    input.setLayoutParams(lp);

    createInputDialog(this, this, this, input);

И вот метод createInputDialog:

public void createInputDialog(final Activity ga,
        DialogInterface.OnClickListener listener,
        DialogInterface.OnKeyListener keylistener, EditText input) {

    AlertDialog.Builder editalert = new AlertDialog.Builder(ga);
    editalert
            .setTitle(
                    getResources().getString(R.string.input_dialog_title))
            .setMessage(
                    getResources().getString(
                            R.string.input_dialog_description))
            .setView(input)
            .setPositiveButton(
                    getResources().getString(R.string.dialog_save_button),
                    listener)
            .setNegativeButton(
                    getResources().getString(R.string.button_cancel),
                    listener).setOnKeyListener(keylistener);

    if (alert_input == null) {
        alert_input = editalert.create();
    }

}

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

надеюсь это работает

person juicy_cesar    schedule 07.05.2013

Вы должны дать Фокус для макета. Я тоже сталкиваюсь с этой проблемой. Используйте следующий код. Надеюсь, это сработает.

 RelativeLayout layout2 =(RelativeLayout)layout.findViewById(R.id.endsOn_layout);
layout2.setFocusableInTouchMode(true);
layout2.requestFocus();

ОБНОВЛЕНИЕ

 LinearLayout mainLayout= (LinearLayout)view.findViewById(R.id.main_Layout);
    mainLayout.setFocusableInTouchMode(true);
    mainLayout.requestFocus();
person Hardik Joshi    schedule 24.04.2013
comment
нет, это не работает .. Я объясню, что я сделал в своем alertBox. Я раздуваю представление для alertBox, его имя - представление. и в этом представлении LinearLayout есть его имя «основной макет», я раздуваю другое представление, которое содержит радиогруппы и тексты редактирования. его имя макет. я добавляю 2-й вид (макет) в первый вид (вид). и когда я нажимаю на радиокнопки, он работает правильно. но когда я нажимаю на editText, он не открывает программную клавиатуру - person Vikky; 24.04.2013
comment
Ок. Попробуйте поставить mainLayout. Я обновляю ответ. Пожалуйста, проверьте. - person Hardik Joshi; 24.04.2013
comment
есть ли альтернативное решение для этого. мне нужно ввести только цифры в текстовое поле.. так что... есть ли другое решение для этого - person Vikky; 24.04.2013
comment
Вы все еще сталкиваетесь с этой проблемой? - person Hardik Joshi; 24.04.2013