在AlertDialog自定义视图中膨胀并输入信息

时间:2014-07-17 10:27:02

标签: android

我需要在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);

感谢任何帮助。

1 个答案:

答案 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);

由于您要动态扩充布局,因此必须指定具有这些视图的布局。