我需要在AlertDialog视图中插入带有子元素的自定义视图,如EditText。这很好用,但是当用户点击AlertDialog ok按钮时,我需要获取子元素的信息,但是不是获取我在UI中插入的文本而是获得空字符串或空指针,就像在Log.e()中看到的那样在代码中。
AlertDialog:
final AlertDialog.Builder alert = new AlertDialog.Builder(context);
alert.setTitle("Title");
alert.setView(getLayoutInflater().inflate( R.layout.sonidovideo, null ) );
alert.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
EditText a = (EditText) findViewById(R.id.segundos);
EditText b = (EditText) findViewById(R.id.segundosFin);
EditText c = (EditText) findViewById(R.id.segundosInicio);
Spinner d = (Spinner) findViewById(R.id.calidades);
Spinner e = (Spinner) findViewById(R.id.detecciones);
Log.e("Is null", (a==null) + ""); //False
Log.e("No text",(a.getText().toString().compareTo("")==0) + ""); //True
Log.e("Is null", (b==null) + ""); //True
Log.e("Is null", (c==null) + ""); //True
Log.e("Is null", (d==null) + ""); //True
Log.e("Is null", (e==null) + ""); //True
}
});
alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.cancel();
}
});
alert.show();
R.layour.sonidovideo(sonidosvideo.xml):
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="match_parent" >
<EditText
android:id="@+id/segundosInicio"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/textView3"
android:ems="10"
android:inputType="numberDecimal" />
<EditText
android:id="@+id/segundos"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/textView2"
android:ems="10"
android:inputType="numberDecimal" >
<requestFocus />
</EditText>
<Spinner
android:id="@+id/detecciones"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textView4"
android:entries="@array/detecciones" />
<EditText
android:id="@+id/segundosFin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/textView6"
android:ems="10"
android:inputType="numberDecimal" />
<Spinner
android:id="@+id/calidades"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/segundosFin"
android:entries="@array/calidades" />
对于获取te子项,我也尝试这个,但结果是相同的
EditText a = (EditText) getLayoutInflater().inflate( R.layout.sonidovideo, null ).findViewById(R.id.segundos);
感谢任何帮助。
答案 0 :(得分:0)
试试这个
EditText a = (EditText) alert.findViewById(R.id.segundos);
EditText b = (EditText) alert.findViewById(R.id.segundosFin);
EditText c = (EditText) alert.findViewById(R.id.segundosInicio);
Spinner d = (Spinner) alert.findViewById(R.id.calidades);
Spinner e = (Spinner) alert. findViewById(R.id.detecciones);
由于您要动态扩充布局,因此必须指定具有这些视图的布局。