2010-04-05 20 views
6

Sto tentando di aggiungere alcune convalide di testo in un campo di testo di modifica situato all'interno di una finestra di dialogo di avviso. Richiede all'utente di inserire un nome.Convalida null nella casella EditText in Alert Dialog - Android

Desidero aggiungere alcune convalide in modo che se ciò che hanno inserito sia vuoto o nullo, non fa nulla oltre alla creazione di un errore di pronuncia di Toast.

Finora ho:

AlertDialog.Builder alert = new AlertDialog.Builder(this); 
    alert.setTitle("Record New Track"); 
    alert.setMessage("Please Name Your Track:"); 
    // Set an EditText view to get user input 
    final EditText trackName = new EditText(this); 
    alert.setView(trackName); 
    alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int whichButton) { 

      String textString = trackName.getText().toString(); // Converts the value of getText to a string. 
      if (textString != null && textString.trim().length() ==0) 
      { 

       Context context = getApplicationContext(); 
       CharSequence error = "Please enter a track name" + textString; 
       int duration = Toast.LENGTH_LONG; 

       Toast toast = Toast.makeText(context, error, duration); 
       toast.show(); 


      } 
      else 
      { 

       SQLiteDatabase db = waypoints.getWritableDatabase(); 
       ContentValues trackvalues = new ContentValues(); 
       trackvalues.put(TRACK_NAME, textString); 
       trackvalues.put(TRACK_START_TIME,tracktimeidentifier); 
       insertid=db.insertOrThrow(TRACK_TABLE_NAME, null, trackvalues); 

      } 

Ma questo solo chiude la finestra di avviso e quindi visualizza il Toast. Voglio che la finestra di dialogo degli avvisi continui a essere visualizzata sullo schermo.

Grazie

risposta

3

Penso che si dovrebbe ricreare il Dialog, come sembra il DialogInterface data come parametro in onClick() non ti dà la possibilità di fermare la chiusura del Dialog.

Ho anche un paio di consigli per voi:

Provare a utilizzare Activity.onCreateDialog(), Activity.onPrepareDialog() e naturalmente Activity.showDialog(). Rendono l'uso della finestra di dialogo molto più semplice (almeno per me), anche l'utilizzo della finestra di dialogo sembra più simile all'utilizzo del menu. Usando questi metodi, sarai anche in grado di mostrare più facilmente la finestra di dialogo.

Voglio darti un consiglio. Non è una risposta alla tua domanda, ma farlo in una risposta è molto più leggibile.

Invece di tenere un riferimento a un oggetto AlertDialog.Builder(), si può semplicemente fare:

new AlertDialog.Builder(this) 
.setTitle("Record New Track") 
.setMessage("Please Name Your Track:") 
//and some more method calls 
.create(); 
//or .show(); 

si salva un riferimento e un sacco di battitura;). (quasi?) Tutti i metodi di AlertDialog.Builder restituiscono un oggetto AlertDialog.Builder, sul quale è possibile chiamare direttamente un metodo.

Lo stesso vale per Toast s:

Toast.makeText(this, "Please enter...", Toast.LENGTH_LONG).show(); 
1

Che cosa si dovrebbe fare è quello di creare un layout XML personalizzato tra cui una casella di testo e un pulsante OK invece di utilizzare .setPositiveButton. Quindi puoi aggiungere un click listener al tuo pulsante per convalidare i dati e chiudere la finestra di dialogo.

dovrebbe essere usato in CreateDialog:

protected Dialog onCreateDialog(int id) 
{ 
      LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

if (id==EDIT_DIALOG) 
{ 
      final View layout = inflater.inflate(R.layout.edit_dialog, (ViewGroup) findViewById(R.id.Layout_Edit)); 

      final Button okButton=(Button) layout.findViewById(R.id.Button_OkTrack); 
      final EditText name=(EditText) layout.findViewById(R.id.EditText_Name); 
      okButton.setOnClickListener(new View.OnClickListener() 
      { 
       public void onClick(View v) { 
        String textString = trackName.getText().toString(); 
        if (textString != null && textString.trim().length() ==0) 
        { 
         Toast.makeText(getApplicationContext(), "Please enter...", Toast.LENGTH_LONG).show(); 
        } else 
         removeDialog(DIALOG_EDITTRACK); 
       } 
      });    
      AlertDialog.Builder builder = new AlertDialog.Builder(this); 
      builder.setView(layout); 
      builder.setTitle("Edit text"); 

      AlertDialog submitDialog = builder.create();    
      return submitDialog; 
} 
3

Faccio un nuovo metodo all'interno della mia classe che mostra l'allarme e mettere tutto il codice per creare la segnalazione che un metodo. poi, dopo aver chiamato il Toast, chiamo quel metodo. Dire che il nome che il metodo createAlert(), allora ho,

createAlert(){ 

AlertDialog.Builder alert = new AlertDialog.Builder(this); 
alert.setTitle("Record New Track"); 
alert.setMessage("Please Name Your Track:"); 
// Set an EditText view to get user input 
final EditText trackName = new EditText(this); 
alert.setView(trackName); 
alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int whichButton) { 

     String textString = trackName.getText().toString(); // Converts the value of getText to a string. 
     if (textString != null && textString.trim().length() ==0) 
     { 

      Context context = getApplicationContext(); 
      CharSequence error = "Please enter a track name" + textString; 
      int duration = Toast.LENGTH_LONG; 

      Toast toast = Toast.makeText(context, error, duration); 
      toast.show(); 
      createAlert(); 



     } 
     else 
     { 

      SQLiteDatabase db = waypoints.getWritableDatabase(); 
      ContentValues trackvalues = new ContentValues(); 
      trackvalues.put(TRACK_NAME, textString); 
      trackvalues.put(TRACK_START_TIME,tracktimeidentifier); 
      insertid=db.insertOrThrow(TRACK_TABLE_NAME, null, trackvalues); 

     } 
} 
0

utilizzare questo codice per la visualizzazione di dialogo.

public void onClick(DialogInterface dialog, int whichButton) { 

      String textSt`enter code here`ring = trackName.getText().toString(); // Converts the value of getText to a string. 
      if (textString != null && textString.trim().length() ==0) 
      {  
       Context context = getApplicationContext(); 
       CharSequence error = "Please enter a track name" + textString; 
       int duration = Toast.LENGTH_LONG; 

       Toast toast = Toast.makeText(context, error, duration); 
       toast.show(); 

       new AlertDialog.Builder(this) 
       .setTitle("Message") 
       .setMessage("please enter valid field") 
       .setPositiveButton("OK", null).show();    
      } 

questo creerà una finestra di dialogo per voi, editText è vuoto o quali sono le condizioni che si vuole.

0

// se la vista non è un'istanza, restituisce sempre null per i valori di edittext.

View v = inflater.inflate(R.layout.new_location_dialog, null); 
builder.setView(v); 



final EditText titleBox = (EditText)v.findViewById(R.id.title); 
final EditText descriptionBox = (EditText)v.findViewById(R.id.description); 
Problemi correlati