我无法获得EditText值

时间:2013-12-26 14:08:03

标签: android android-edittext calendarview

我有一个带有CalendarView和EditText的布局,我在AlertDialog中显示它们,但是当我单击OK时,我无法获得EditText(numberDecimal)的值。

private void dialogHoras() {
    LayoutInflater inflater = (LayoutInflater)getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    LinearLayout ll= (LinearLayout)inflater.inflate(R.layout.almanaque, null, false);
    CalendarView cv = (CalendarView) ll.getChildAt(0);
    final EditText input = (EditText)findViewById(R.id.etHoras);
    cv.setFirstDayOfWeek(2);
    cv.setOnDateChangeListener(new OnDateChangeListener() {

        @Override
        public void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth) {
            dia = dayOfMonth; mes = month; anio = year;
        }
    });
    new AlertDialog.Builder(this)
        .setTitle("HORAS EXTRAS")
        .setIcon(drawable.ic_launcher)
        .setView(ll)
        .setPositiveButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
                String res = input.getText().toString();        
                mensaje("INFO", "Se le deben... " + res + "horas");
            }

        }).setNegativeButton("Volver", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
                // Do nothing.
            }
        } ).show();
}

4 个答案:

答案 0 :(得分:3)

您正在为视图充气,因此您必须传递该视图的引用以查找元素的ID。所以改变

final EditText input = (EditText)findViewById(R.id.etHoras);

final EditText input = (EditText)ll.findViewById(R.id.etHoras);

此外,如果您想获得editText的值,请使用:

String myValue = yourEdittext.getText().toString():

答案 1 :(得分:2)

   EditText txtPwd = (EditText) findViewById(R.id.user_password);
   String passWord = txtPwd.getText().toString().trim();

答案 2 :(得分:1)

替换

final EditText input = (EditText)findViewById(R.id.etHoras);

final EditText input = (EditText)ll.findViewById(R.id.etHoras);

第一个在Activity布局中搜索EditText,第二个在LinearLayout中搜索,这是Dialog View的一部分

答案 3 :(得分:0)

您正在使用主Activity中的AlertDialog。基本上发生的事情是当你使用final EditText input = (EditText)findViewById(R.id.etHoras);

Android默认情况下搜索主Activity中不存在的editText。因此,为了让android知道你想要来自AlertDialog的editText你必须给它的视图充气,然后用它来搜索editText。

由于您已经在

中夸大了AlertDialog的视图
LayoutInflater inflater = (LayoutInflater)getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout ll= (LinearLayout)inflater.inflate(R.layout.almanaque, null, false);

你只需要告诉android搜索ll中存在的editText。您可以通过以下方式使用

final EditText input = (EditText)ll.findViewById(R.id.etHoras);