2011-11-18 3 views
5

Sto creando una finestra di dialogo di avviso all'inizio della mia applicazione per consentire all'utente di scegliere dove archiviare i dati che la mia applicazione sta scaricando dal web. La cosa che voglio ottenere ora dipende dalla dimensione della memoria interna/esterna. Voglio impostare uno degli elementi selezionati. Ecco il codice che sto usando per creare la finestra di dialogo:Android ha impostato la voce selezionata nella finestra di avviso

@SuppressWarnings("static-access") 
public void createDialog(){ 


    final CharSequence[] items = {"Phone Memory - "+memorysize+" free space", "SD Card - "+megAvailable+" MB free space"}; 

    final int userId = rpc.getUserId(this); 
    final String servername = rpc.getCurrentServerName(this); 

    SharedPreferences stampiiSettings = PreferenceManager.getDefaultSharedPreferences(MyCollectionList.this); 
    final SharedPreferences.Editor editor = stampiiSettings.edit(); 

    AlertDialog.Builder builder = new AlertDialog.Builder(this.getParent()); 
    builder.setTitle("Select Storage Path"); 
    builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int item) { 

      if(item == 0){ 

       rpc.createFoldersInInternalStorage(servername, userId, MyCollectionList.this); 
       Toast.makeText(getApplicationContext(), "Selected Storage Path : Phone Memory", Toast.LENGTH_SHORT).show(); 
       editor.putInt("storagePath", 1); 
       editor.commit(); 
      } else if (item == 1){ 

       rpc.createFoldersInExternalStorage(servername, userId, MyCollectionList.this); 
       Toast.makeText(getApplicationContext(), "Selected Storage Path : SD Card", Toast.LENGTH_SHORT).show(); 
       editor.putInt("storagePath", 2); 
       editor.commit(); 
      } 
     }}); 

     builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
       mHandlerUpdateUi.post(mUpdateUpdateUi); // update UI    
     } 
     }); 
     AlertDialog alert = builder.show(); 
} 

E un'altra cosa che voglio raggiungere, come posso impedire all'utente di chiudere la finestra di avviso, se non ha scelto alcun elemento. Non voglio chiudere la finestra di dialogo premendo il pulsante Indietro o quando fa clic sul pulsante OK. Qualsiasi idea/suggerimento/aiuto sono ben accetti!

risposta

17

fare qualcosa di simile:

int selected = 0; // or whatever you want 
builder.setSingleChoiceItems(items, selected, new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int item) { 
       //onclick 
    }}); 
3

pulsante chiusura è possibile definire il pulsante Annulla con l'ok come questo senso

builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
      // no need to write anything here just implement this interface into this button 
     } 
}); 

per l'elemento selezionato è possibile fare la trottola come locali definire per questa classe oppure è possibile assegnare questo valore a qualsiasi variabile come selezionato.

int selected = 0; // if you want in integer or 
String selected = "internal"; // you can go with string 

ora è possibile impostare il valore di default per questo e ottenere il valore quando si fa clic sul pulsante OK della finestra di dialogo

builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int which) { 
      // here get the selected item value 
    } 
});