1

私のアラートボックスで何をしたかを説明します。その名前がビューであるアラートボックスのビューをインフレートします。そのビューには LinearLayout があり、その名前は「メイン レイアウト」です。radioGroups と editTexts を含む別のビューを膨らませます。その名はレイアウト。最初のビュー (ビュー) に 2 番目のビュー (レイアウト) を追加します。radioButtons をクリックすると、正しく動作します。しかし、editText をクリックしても、softKeyboard が開きません –</p>

ビューを膨らませるアラートボックスを開きます。しかし、alertBox の EditText をクリックすると、ソフト キーボードが表示されません。

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) をクリックしても、キーボードがポップアップしません。

4

2 に答える 2

3

私はあなたと同じ問題に直面しました...そしていくつかのパラメータを(プログラムと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();
    }

}

そして、いつでもアラートを表示するだけで、編集テキストは必要なように機能します。

うまくいくことを願っています

于 2013-05-07T16:13:11.673 に答える
2

レイアウトにフォーカスを当てる必要があります。私もこの問題に直面しています。次のコードを使用します。これがうまくいくことを願っています。

 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();
于 2013-04-24T08:49:54.193 に答える