2012-08-30 24 views
8

He creado un cuadro de diálogo con un ListView personalizado que modela una pantalla Spinner, y originalmente comienza con el valor "Seleccionar género".Establecer el elemento seleccionado predeterminado de ListView Alert Dialog en Android

Cuando se abre el cuadro de diálogo, solicita una selección (como una rueda giratoria). Si la selección se selecciona nuevamente, muestra las mismas opciones, pero no indica qué opción ya se ha seleccionado.

Ejemplo:
Valor por defecto: "Seleccionar sexo"
de diálogo se abre con ninguna selección selecciona
usuario: "Hombre"
usuario vuelve a abrir diálogo ...
de diálogo se abre con ninguna selección

(Me gustaría que tuviera seleccionado "Hombre", ya que esa era su última selección)

Aquí está mi código hasta ahora:

genderItems = getResources().getStringArray(R.array.gender_array); 
genderAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, genderItems); 

genderDrop.setOnTouchListener(new View.OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 
      if(event.getAction() == MotionEvent.ACTION_DOWN) { 
       Builder genderBuilder = new AlertDialog.Builder(Register.this) 
        .setTitle(R.string.gender_prompt) 
        .setAdapter(genderAdapter, new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         inputGender.setText(genderItems[which]); 
         dialog.dismiss(); 
        } 
       }); 
       AlertDialog genderAlert = genderBuilder.create(); 
       genderAlert.show(); 
       genderAlert.getListView().setSelection(0); 
      } 
      return false; 
     } 
}); 

genderAlert.getListView().setSelection(0)no establece el valor predeterminado seleccionado como "macho"
genderAlert.getListView().setSelection(1)no establece el valor predeterminado seleccionado como "femenino"

Respuesta

19

calculado hacia fuera:

Cambié de .setAdapter a .setSingleChoiceItems que tiene un argumento para la selección predeterminada. Entonces, todo lo que tuve que hacer fue crear una variable global que se configurara cada vez que hacía clic en una opción. La variable global se establece inicialmente en -1 por lo que no se selecciona ninguna opción, luego, cuando hago clic en algo, se establece en la posición y la próxima vez que se crea el cuadro de diálogo, la selección refleja mi selección anterior. Ver a continuación:

Integer selection = -1; 

genderItems = getResources().getStringArray(R.array.gender_array); 
genderAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, genderItems); 

genderDrop.setOnTouchListener(new View.OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 
      if(event.getAction() == MotionEvent.ACTION_DOWN) { 
       Builder genderBuilder = new AlertDialog.Builder(Register.this) 
        .setTitle(R.string.gender_prompt) 
        .setSingleChoiceItems(genderAdapter, selection, new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int which) { 
          inputGender.setText(genderItems[which]); 
          selection = which; 
          dialog.cancel(); 
         } 
        }); 
       AlertDialog genderAlert = genderBuilder.create(); 
       genderAlert.show(); 
      } 
      return false; 
     } 
}); 
+0

¿Qué es 'genderDrop' aquí? – NarendraJi

Cuestiones relacionadas