我有一个带有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();
}
答案 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);