recorrer - spinner android developer
Spinner no muestra valor seleccionado (18)
He implementado el spinner al rellenar la lista de matrices a través de la base de datos. Puedo obtener y mostrar la lista de matrices en mi adaptador de matrices de spinner, pero si selecciono el elemento en spinner, no aparece en spinner.
Aquí está mi código,
Spinner spinner1 = (Spinner) findViewById(R.id.prospin);
ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, providerlist);
adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner1.setAdapter(adapter1);
Obtengo la cadena del elemento seleccionado mediante este,
Spinner provid = (Spinner)findViewById(R.id.prospin);
String provider =provid.getSelectedItem().toString();
¿Puede alguien ayudarme por favor pls!
Problema:
Spinner no muestra el valor predeterminado ni el valor del elemento seleccionado. Pero los elementos del menú desplegable se muestran cuando se seleccionan.
Porque:
¡El fondo y el color del texto son ambos blancos!
Soluciones:
xml (preferible):
Escriba un diseño personalizado para un elemento de Spiner y utilícelo en lugar del predeterminado, android.R.layout.simple_spinner_item
.
¿Cómo cambiar el tamaño del texto del giro y el color del texto?
Código (menos confiable):
your_spinner_instance.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){
public void onItemSelected(AdapterView<?> parent, View view, int pos,
long id) {
((TextView) view).setTextColor(Color.RED);
}
public void onNothingSelected(AdapterView<?> parent) {
}
});
Android necesita alguna actualización importante o tal vez el dardo y el aleteo deberían tomar el control ...
Gracias catluc
Bueno, esto también sucede si el contexto no se da correctamente. Estaba usando getApplicationContext()
donde necesita getBaseContext()
.
Conseguí el mismo problema y lo resolví agregando notifyDataSetChanged()
después de vincular datos en Spinner.
En primer lugar, tengo un adaptador de enlace con ArrayList
blanco, luego ArrayList
una lista de elementos del servidor y los agregué a esa lista, pero me olvidé de notifyDataSetChanged()
después de la lista actualizada.
Espero que sea de ayuda.
solo agrega adapter.notifyDataSetChanged();
después de actualizar la lista.
Debes usar el primer Spinner para obtener los valores.
Prueba el siguiente código:
String provider = spinner1.getSelectedItem().toString();
Lo que estás haciendo es obtener el valor predeterminado de la ruleta.
El problema de lo que encontré fue con la hoja de estilo. Use esto
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="windowNoTitle">false</item>
<item name="windowActionBar">true</item>
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
Para el diseño xml use este
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fitsSystemWindows="true"
android:paddingBottom="5dp"
style="@style/AppTheme">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="5dp"
android:paddingLeft="24dp"
android:paddingRight="24dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Spinner"
android:layout_marginTop="10dp"
android:textColor="@color/colorBlack"/>
<Spinner
android:id="@+id/Spinner"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:backgroundTint="@color/colorPrimary"
android:textColorHint="#05ab9a"
android:padding="15dp"
style="@style/Base.Widget.AppCompat.Spinner.Underlined"
tools:targetApi="lollipop" />
</LinearLayout>
</ScrollView>
Y finalmente para la clase.
String [] NUMBERS= {"3 ","6 ","13 "};
Spinner s_spinner = (Spinner) findViewById(R.id.Spinner);
ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<>(this,
android.R.layout.simple_dropdown_item_1line, NUMBERS);
// Specify the layout to use when the list of choices appears
spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// attaching data adapter to spinner
s_spinner.setAdapter(spinnerAdapter );
En general, los giradores se seleccionan de forma predeterminada cuando se usan, por lo tanto, trate de establecer en blanco, o cualquier otro dato en la primera posición que sea la posición cero, obtendrá la posición exacta del elemento seleccionado.
Esta respuesta puede ser un poco estúpida pero inténtalo. Funciono para mi
- ¡Comprueba el color de fondo de tu hilandero!
- Y si es blanco cámbialo.
- ¡Disfrútala!
Esta respuesta puede ser un poco estúpida, pero si comete el mismo error, intente ... establezca primero los valores en su ArrayList y luego asigne esa arrayList a spinner. Declaré una arrayList global y la configuré como spinner primero y luego le agregué valores desde otro método ... en ese momento me enfrenté al mismo problema. De lo contrario, puede notificar a DataDetSetChanged () a su arrayList.
Para mí el problema es que estoy usando getApplicationContext()
. Cuando cambio a this
funciona bien.
ArrayAdapter<*> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, documentsCategories);
Prueba este código
ArrayAdapter<String> arrayAdapte=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item,states);
arrayAdapte.setDropDownViewResource(android.R.layout.simple_list_item_1 );
spinnerState.setAdapter(arrayAdapte);
String data=spinnerState.getSelectedItem().toString(); // this is select particular item from list;
int position=spinnerState.getSelectedItemPosition(); // this return position of data selected in list;
Prueba esto.
final ArrayList<String> providerlist= new ArrayList<String>();
Spinner spinner1 = (Spinner) findViewById(R.id.prospin);
ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, providerlist);
adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner1.setAdapter(adapter1);
spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// On selecting a spinner item
String item = providerlist.get(position);
// Showing selected spinner item
Toast.makeText(this,
"Selected Country : " + item, Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
Revisa estos enlaces:
- http://www.technotalkative.com/android-spinner-example/
- http://www.mkyong.com/android/android-spinner-drop-down-list-example/
Si no, intenta almacenarlo al seleccionar el artículo:
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapter, View v,
int position, long id) {
// On selecting a spinner item
String item = adapter.getItemAtPosition(position).toString();
// Showing selected spinner item
Toast.makeText(getApplicationContext(),
"Selected Country : " + item, Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
Si tiene un adaptador personalizado, debe cambiar el color del texto de TextView.
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView view = (TextView) super.getView(position, convertView, parent);
view.setTextColor(Color.parseColor("#000000"));
return view;
}
y si no tiene un adaptador personalizado, solo debe cambiar el fondo del girador
Tienes que hacer algunos cambios como:
Spinner spinner1 = (Spinner) findViewById(R.id.prospin);
ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, providerlist);
adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
en lugar de "android.R.layout.simple_spinner_dropdown_item"
adapter1.setDropDownViewResource(android.R.layout.simple_list_item_activated_1);
Utilice "android.R.layout.simple_list_item_activated_1"
spinner1.setAdapter(adapter1);
Se resaltará el valor seleccionado en consecuencia. El color seleccionado es elegido por el tema predeterminado de tu aplicación.
Para obtener más información, siga el siguiente enlace: https://developer.android.com/reference/android/R.layout.html#simple_list_item_activated_1
Usa wrap_content para la altura del hilandero. Probablemente no tenga la altura suficiente para mostrar el texto.
Wierd. Yo tuve el mismo problema. Lo que hice para que funcione: 1. Agregue algunos datos iniciales a la lista (ej .--- por favor seleccione - -) 2. Cargue el resto de datos y agréguelos a la lista 3. Llame a adapter.notifyDatasetChaged ()
prueba este código ==>
ArrayAdapter<String> stateNameAdaptor = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, stateNameList);
stateNameAdaptor.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spnState.setAdapter(stateNameAdaptor);
use el android:spinnerMode="dropdown"
en el xml de su elemento Spinner
declarado