2012-07-01 7 views
21

Nel seguente codice qui sotto, come posso eliminare la casella di avviso? Non voglio causare una perdita di memoria. Ho provato il .dismiss() su alertDialog, ma che non ha funzionato ... GrazieCome eliminare AlertDialog.Builder?

// User pressed the stop button 
public void StopMsg_button_action(View view){ 
    final EditText password_input = new EditText(this); // create an text input field 
    password_input.setHint("Enter Password"); // put a hint in it 
    password_input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); // change it to password type 

    AlertDialog.Builder alertDialog = new Builder(this); // create an alert box 
    alertDialog.setTitle("Enter Password"); // set the title 
    alertDialog.setView(password_input); // insert the password text field in the alert box 
    alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() { // define the 'OK' button 
     public void onClick(DialogInterface dialog, int which) { 
      String entered_password = password_input.getText().toString(); 
      if (entered_password.equals(my_password)) { 
       locManager.removeUpdates(locListener); // stop listening for GPS coordinates 
       startActivity(new Intent(Emergency_1Activity.this,Main_MenuActivity.class)); // go to main menu 
      } else { 
       alert("Incorrect Password"); 
      } 
     } 
    }); 
    alertDialog.setNeutralButton("Cancel", new DialogInterface.OnClickListener() { // define the 'Cancel' button 
     public void onClick(DialogInterface dialog, int which) { 

     } 
    }); 
    alertDialog.show(); // show the alert box 
} 

risposta

39

Cosa non ha funzionato su respingere()?

Si dovrebbe essere in grado di utilizzare sia Dialog.dismiss(), o Dialog.cancel()

alertDialog.setNeutralButton("Cancel", new DialogInterface.OnClickListener() { // define the 'Cancel' button 
    public void onClick(DialogInterface dialog, int which) { 
     //Either of the following two lines should work. 
     dialog.cancel(); 
     //dialog.dismiss(); 
    } 
}); 
+0

puoi mostrarmi il codice? Sono davvero confuso qui, grazie – sneaky

+0

sicuro, vedere la mia modifica. – FoamyGuy

+13

'AlertDialog.Builder' non ha il metodo' cancel' – xmen

1

Invece di alertDialog.setNeutralButton basta usare alertDialog.setNegativeButton. Utilizzare dialog.cancel(), perché dialog.dismiss() non è un metodo disponibile per le finestre di avviso.

1

Basta sovrascrivere il metodo di creazione e salvare l'istanza della finestra di dialogo. Poi si può chiamare respingere

@Override 
public AlertDialog create() { 
    this.dialog = super.create(); 
    return this.dialog; 
} 

Da qualche parte al codice:

dialog.dismiss(); 
10

È necessario utilizzare questo modo se non si vuole mettere tutti i tasti e hanno layout personalizzato in cui si avete dire TextView e si vuole respingere dialogo avviso in caso di clic di quel TextView:

AlertDialog alertDialog = builder.show(); 

poi check

if(alertDialog != null && alertDialog.isShowing()){ 
     alertDialog.dismiss(); 
} 

Questo è anche vero se si desidera ignorarlo da qualche altra parte nella propria attività dopo aver controllato alcune condizioni.

+1

perfetta e migliore risposta con grande spiegazione –

28

Con il seguente codice è possibile visualizzare un AlertDialog ListBox e quando si preme un elemento si chiude la finestra di dialogo. L'ordine del codice è importan.

AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext); 

String names[] ={"A","B","C","D"}; 
ArrayAdapter<String> adapter = new ArrayAdapter<String>(mContext,android.R.layout.simple_list_item_1,names); 

LayoutInflater inflater = getLayoutInflater(); 
View convertView = (View)inflater.inflate(R.layout.list_layout, null); 
ListView lv = (ListView) convertView.findViewById(R.id.listView1); 
lv.setAdapter(adapter); 
alertDialog.setView(convertView); 
alertDialog.setTitle("List"); 
final AlertDialog ad = alertDialog.show(); 

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() 
{ 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
    { 
     //Toast.makeText(mContext, position, Toast.LENGTH_LONG).show(); 
     ad.dismiss(); 
    } 
}); 
+0

Perfetto! Molte grazie! – NightFury

+0

Questo è quello che stavo cercando. Grazie!!!! – Vicky

+0

Grazie! La chiave qui è di chiudere la finestra di dialogo creata con alertDialog.show(). La creazione di una finestra di dialogo dal builder e il richiamo di chiamata su quella finestra di dialogo non eliminano la stessa finestra di dialogo che creiamo quando chiamiamo show(). Questo mi ha fatto perplesso per un po '=) –

7

Questo metodo Demos il codice che serve .. dalla precedente risposta di Namrata

@SuppressLint("InflateParams") 
private static void showDialog(Activity activity, int layoutId) 
{ 
    LayoutInflater inflater = activity.getLayoutInflater(); 
    View dialoglayout = inflater.inflate(layoutId, null); 

    AlertDialog.Builder builder = new AlertDialog.Builder(activity); 
    builder.setView(dialoglayout); 

    CustomDialog.doCustomLogic(activity, layoutId, dialoglayout); 

    final AlertDialog alertDialog = builder.show(); 

    // caller assumes there will be a btn_close element present 
    Button closeNowBtn = (Button) dialoglayout.findViewById(R.id.btn_close); 
    closeNowBtn.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick(View v) 
     { 
      alertDialog.dismiss(); 
     } 
    }); 
} 
13

il codice è molto semplice:

final AlertDialog show = alertDialog.show(); 

infine nell'azione del tasto per esempio:

show.dismiss(); 

Per esempio Le con un alertdialog personalizzato:

enter image description here

Codice in Java, è possibile creare un oggetto AlertDialog: XML

public class ViewAlertRating { 

    Context context; 
    public ViewAlertRating(Context context) { 
     this.context = context; 
    } 

    public void showAlert(){ 

     AlertDialog.Builder alertDialog = new AlertDialog.Builder(context); 
     LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
     View alertView = inflater.inflate(R.layout.layout_test, null); 
     alertDialog.setView(alertView); 

     final AlertDialog show = alertDialog.show(); 

     Button alertButton = (Button) alertView.findViewById(R.id.btn_test); 
     alertButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       show.dismiss(); 
      } 
     }); 
    } 
} 

Codice layout_test.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 


    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="Valoración" 
     android:id="@+id/text_test1" 
     android:textSize="20sp" 
     android:textColor="#ffffffff" 
     android:layout_centerHorizontal="true" 
     android:gravity="center_horizontal" 
     android:textStyle="bold" 
     android:paddingTop="10dp" 
     android:paddingBottom="10dp" 
     android:background="#ff37dabb" 
     android:paddingLeft="20dp" 
     android:paddingRight="20dp" /> 


    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:paddingLeft="20dp" 
     android:paddingRight="20dp" 
     android:layout_marginTop="15dp"> 

     <EditText 
      android:layout_width="match_parent" 
      android:layout_height="120dp" 
      android:id="@+id/edit_test" 
      android:hint="Descripción" 
      android:textColor="#aa000000" 
      android:paddingLeft="10dp" 
      android:paddingRight="10dp" 
      android:textColorHint="#aa72777a" 
      android:gravity="top" /> 
    </LinearLayout> 

    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="center_horizontal" 
     android:paddingTop="10dp" 
     android:paddingLeft="15dp" 
     android:paddingRight="15dp" 
     android:paddingBottom="15dp" > 

     <LinearLayout 
      android:orientation="horizontal" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" > 

      <LinearLayout 
       android:orientation="horizontal" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:weightSum="1.00" 
       android:gravity="right" > 

       <Button 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:text="Enviar" 
        android:id="@+id/btn_test" 
        android:gravity="center_vertical|center_horizontal" 
        android:textColor="#ffffffff" 
        android:background="@drawable/btn_flat_blue_selector" /> 
      </LinearLayout> 
     </LinearLayout> 
    </LinearLayout> 
</LinearLayout> 

infine, invitano Attività:

ViewAlertRating alertRating = new ViewAlertRating(this); 
alertRating.showAlert(); 
+1

ottima soluzione. Mi ha aiutato molto! –

0

Ho provato questo e ha funzionato!

.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialogInterface, int i) { 
       alertDialog.setCancelable(true); 
      } 
     }); 
+0

Grazie ............. – Varma

0

di respingere o annullare AlertDialog.Builder

dialog.setNegativeButton("إلغاء", new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialogInterface, int i) { 
     dialogInterface.dismiss() 
    } 
}); 

Dovete chiamare dismiss() sull'interfaccia finestra di dialogo.