2013-07-04 44 views
0

我有MainActivity,我有一個打開對話框的按鈕。一旦我點擊這個按鈕,我打開了我的對話框,現在我在這個對話框中有兩個文本字段和兩個按鈕。Android對話框 - 更改數據

如何通過單擊其中一個按鈕來更改該字段中的文本?

我正在嘗試一些技巧,但我總是得到NullPointerException

在此先感謝!

回答

0

當您使用AlertDialog.Builder的對話框中,設置按鈕的onClickListener改變EditText上的值:

AlertDialog.Builder dialog = new AlertDialog.Builer(this); 
... 
final EditText edit = new EditText(this); 
dialog.setView(edit); 
... 
dialog.setPositiveButton("Change the freakin text",new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog,int id){ 
        edit.setText("bla bla bla"); 
       } 
       }); 
... 
+0

但我已經創建的EditText字段隨機文本,我想通過點擊一個按鈕來改變它。如何獲取放置在對話框佈局中的EditText字段的ID? – dejvid

+0

您已經擁有EditText的引用,因爲您在將它添加到對話框之前以編程方式創建了它。如果尚未以編程方式創建它,但是在XML佈局中,則使用'findViewById(id)',其中id是佈局中的名稱。 –

+0

@dejvid你需要使用dialog對象來初始化editext。您可以將當前視圖層次結構的'findViewById'設置爲該活動。在你的情況下,你有對話。所以你需要使用dialog對象來初始化edittext。 – Raghunandan

1

我會用一個自定義對話框。

您需要使用對話框對象來查找ViewById並初始化視圖。

dialog.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 

    android:orientation="vertical" > 

    <Button 
     android:id="@+id/button2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBaseline="@+id/button1" 
     android:layout_alignBottom="@+id/button1" 
     android:layout_alignParentRight="true" 
     android:layout_marginRight="58dp" 
     android:text="Cancel" /> 

    <EditText 
     android:id="@+id/ed1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/textView1" 
     android:layout_marginTop="56dp" 
     android:layout_toLeftOf="@+id/button2" 
      /> 

    <EditText 
      android:id="@+id/ed2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/textView2" 
     android:layout_alignParentTop="true" 
     android:layout_marginTop="16dp" 
     /> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignRight="@+id/textView2" 
     android:layout_below="@+id/textView2" 
     android:layout_marginRight="27dp" 
     android:layout_marginTop="39dp" 
     android:text="ChangeText" /> 

</RelativeLayout> 

然後在你的活動上說點擊鏈接

dialogPopup(); 

然後

public void dialogPopup() 
{ 
    final Dialog d = new Dialog(MainActivity.this); // initialize dialog 
    d.setContentView(R.layout.dialog); 
    d.setTitle("my title"); 
    final EdiText ed1= (TextView) d.findViewById(R.id.ed1); 
    // initialize edittext using the dialog object. 
    final EdiText ed2= (TextView) d.findViewById(R.id.ed2); 
    Button b = (Button) d.findViewById(R.id.button1); 
    b.setOnClickListener(new OnClickListener() // button 1 click 
    { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
        // on click of button 1 change the text in textview's 
      ed1.setText("Changing text 1"); 
      ed2.setText("Changing text 2"); 
     } 

    }); 
    Button b1 = (Button) d.findViewById(R.id.button2); // button2 click 
     b1.setOnClickListener(new OnClickListener() 
     { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       d.dismiss(); // dismiss dialog 
      } 

     }); 
     d.show(); // show the dialog 
}