Tengo este código para mi spinner simple:

 private Spinner spnr_gender;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_complete_profile);

    //GUI
    spnr_gender = (Spinner)findViewById(R.id.spnr_finish_gender);

    ArrayAdapter<CharSequence> gender_adapter = ArrayAdapter.createFromResource(this, R.array.strs_gender, android.R.layout.simple_spinner_item);
    gender_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spnr_gender.setAdapter(gender_adapter);
    spnr_gender.setOnItemClickListener((AdapterView.OnItemClickListener) this);

}


@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
    String selectChoice = adapterView.getItemAtPosition(i).toString();
    Toast.makeText(adapterView.getContext(), selectChoice, Toast.LENGTH_SHORT).show();
}

@Override
public void onNothingSelected(AdapterView<?> adapterView) {

}

Lo que quiero es brindar por lo que el usuario ha seleccionado en la ruleta. Mi matriz de cadenas en strings.xml:

<string-array name="strs_gender">
    <item>Male</item>
    <item>Female</item>
</string-array>

Al ejecutar la aplicación, simplemente se bloqueó.
No puedo encontrar nada en el logcat pero mi sospechoso es esta línea spnr_gender.setOnItemClickListener((AdapterView.OnItemClickListener) this);.

¿Cómo puedo arreglar esto?

-1
Dranreb 26 feb. 2018 a las 14:36

4 respuestas

La mejor respuesta

Utilice este

spnr_gender.setOnItemSelectedListener(this);

En lugar de

spnr_gender.setOnItemClickListener((AdapterView.OnItemClickListener) this);

setOnItemSelectedListener

void setOnItemSelectedListener (AdapterView.OnItemSelectedListener listener)

Registre una devolución de llamada para que se invoque cuando se haya seleccionado un elemento en este AdapterView.

EDITAR

Utilice este

 ArrayAdapter<CharSequence> gender_adapter = ArrayAdapter.createFromResource(this,  android.R.layout.simple_spinner_item,getResources().getStringArray(R.array.strs_gender));

En lugar de esto

ArrayAdapter<CharSequence> gender_adapter = ArrayAdapter.createFromResource(this, R.array.strs_gender, android.R.layout.simple_spinner_item);

Ejemplo de Spinner

2
Nilesh Rathod 26 feb. 2018 a las 11:45

Aqui esta la solucion

Spinner privado spnr_gender;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_complete_profile);

    //GUI
    spnr_gender     =   (Spinner) findViewById(R.id.spnr_finish_gender);

    ArrayAdapter<CharSequence> gender_adapter = ArrayAdapter.createFromResource(this, R.array.strs_gender, android.R.layout.simple_spinner_item);
    gender_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spnr_gender.setAdapter(gender_adapter);
    spnr_gender.setOnItemSelectedListener((AdapterView.OnItemSelectedListener) this);

}


@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
    String selectChoice = adapterView.getItemAtPosition(i).toString();
    Toast.makeText(adapterView.getContext(), selectChoice, Toast.LENGTH_SHORT).show();
}

@Override
public void onNothingSelected(AdapterView<?> adapterView) {

}
0
Mitesh Machhoya 26 feb. 2018 a las 11:50

Hazlo de esta manera

sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
0
Sunil P 26 feb. 2018 a las 11:41

Use solo el contexto (este) al declarar escucha de clics de elemento No emita con (AdapterView.OnItemClickListener) con él.

Usar solo

spnr_gender.setOnItemSelectedListener(this);
0
Quick learner 26 feb. 2018 a las 11:41