2014-06-27 105 views
0

我想顯示我的全部警報對話框。我創建了佈局,然後在OnClickListener上使用它。 (當你點擊列表中的某個元素時,它會顯示關於它的詳細信息)Android AlertDialog.Builder自定義按鈕上的OnClickListener

當AlertDialog出現時,一切正常,但我希望我自己的Dismiss按鈕有效。可悲的是,它不,我不知道如何管理這個。

這是我的XML文件:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/DetailDialog" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:background="@color/popup_background" > 

<Button 
    android:id="@+id/dismissAlert" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignTop="@+id/firstDivider" 
    android:layout_centerHorizontal="true" 
    android:background="@color/popup_background" 
    android:text="Dismiss" 
    android:textColor="@color/splashColor" /> 

<TextView 
    android:id="@+id/alertDetail" 
    android:layout_width="wrap_content" 
    android:layout_height="80dp" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:paddingTop="20dp" 
    android:text="Description : alert&apos;s details" 
    android:textColor="@color/text" 
    android:textSize="20dp" /> 

<View 
    android:id="@+id/firstDivider" 
    android:layout_width="fill_parent" 
    android:layout_height="1dp" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/alertDetail" 
    android:background="@color/design_alert" /> 

和我的代碼的一部分

view.setOnClickListener(new OnClickListener() { 

         @Override 
         public void onClick(View v) { 

          this.messageDialog("Order " + string + " is waiting for a time estimate", OrderAlertsPage.this);  

         } 

         public void messageDialog(String message, final Context activity) { 
          //On instancie notre layout en tant que View 
          LayoutInflater factory = LayoutInflater.from(activity); 
          final View alertDialogView = factory.inflate(R.layout.alert_detail_dialog, null); 

          //Création de l'AlertDialog 
          final AlertDialog.Builder adb = new AlertDialog.Builder(activity); 
          adb.setView(alertDialogView); 

          TextView text = (TextView) alertDialogView.findViewById(R.id.alertDetail); 
          text.setMovementMethod(ScrollingMovementMethod.getInstance()); 
          text.setText(message); 
          text.setGravity(Gravity.CENTER); 

          Button dismiss = (Button) alertDialogView.findViewById(R.id.dismissAlert); 
          dismiss.setOnClickListener(new OnClickListener() { 
           public void onClick(View v) { 

           ((DialogInterface) adb).dismiss(); // I can't do it.. 


           } 
          }); 


          adb.show(); 

         } 
        }); 

感謝您的幫助

+0

您指定的想法不明確 – Giridharan

回答

0

在對話框中調用dismiss(),而不是構建器。

例如,

final AlertDialog dlg = adb.show(); 

// in onClick() 
dlg.dismiss(); 
+0

謝謝@laalto! 我不小心,這是一個愚蠢的錯誤。 再次感謝:) –

0

這對我工作得很好:

alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "Dismiss", 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
     dialog.dismiss(); 
    } 
}); 

你可以試試這個:

dismiss.setOnClickListener(new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
     dialog.dismiss(); 
    } 
}); 

這應該工作。

0

試試這個辦法,希望這將幫助你解決你的問題。

final Dialog dialog = new Dialog(activity, android.R.style.Theme_Translucent_NoTitleBar); 
     dialog.setContentView(R.layout.alert_detail_dialog); 

     TextView text = (TextView) dialog.findViewById(R.id.text); 
     text.setMovementMethod(LinkMovementMethod.getInstance()); 
     text.setText(message); 
     text.setGravity(Gravity.CENTER); 

     Button dismiss = (Button) dialog.findViewById(R.id.dismissAlert); 
     dismiss.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
        dialog.dismiss(); 
      } 
     }); 

dialog.show();