0

我有一个带有 CalendarView 和 EditText 的布局,并在 AlertDialog 中显示它们,但是当我单击“确定”时,我无法获得 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

4 回答 4

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():
于 2013-12-26T14:13:33.390 回答
2
   EditText txtPwd = (EditText) findViewById(R.id.user_password);
   String passWord = txtPwd.getText().toString().trim();
于 2013-12-26T14:11:12.210 回答
1

代替

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

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

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

于 2013-12-26T14:10:54.603 回答
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. 您可以通过以下方式使用

final EditText input = (EditText)ll.findViewById(R.id.etHoras);
于 2013-12-26T14:19:33.200 回答