Actualizar City Spinner con notifyDataSetChanged después de seleccionar estado
¿Cómo actualizo mi spinner de la ciudad una vez que el usuario selecciona un estado?
Ambos campos se rellenan utilizando una DataCall.class
que devuelve datos JSON
y analiza la información en una matriz para la hiladora.
- Spinner popup color de fondo en Android 5.0
- IndexOutOfBounds en Spinner?
- Spinner error en SetOnItemSelectedListener
- Android: Cree el hilador de forma programática desde el array
- Android Spinner Gravity No funciona
Mi código a continuación establece el adapter
ciudad a un defualt "Select State" valor y una vez que el usuario obtiene selecciona el estado que debe utilizar notifyDataSetChanged ya que la matriz predeterminada para la ciudad spinner se actualiza con los nuevos nombres de la ciudad. Los errores que estoy recibiendo se comentan en mi código de abajo.
public class SearchActivity extends Activity{ private static final String TAG = "MyApp"; ArrayAdapter<String> adapter2; String city_values[] = new String[]{"Please select a state."}; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.search_layout); final Spinner zipspinner = (Spinner) findViewById(R.id.zipspinner); final Spinner cityspinner = (Spinner) findViewById(R.id.cityspinner); adapter2 = new ArrayAdapter<String> (this,android.R.layout.simple_spinner_item, city_values); adapter2.setDropDownViewResource(R.layout.city_spinner_layout); cityspinner.setAdapter(adapter2); JSONArray jsonArray; try { String spinnerContentType = "state"; String spinnerURL = "getStoreState.php"; String spinner_data = DataCall.getJSON(spinnerURL,spinnerContentType); Log.d(TAG, spinner_data); jsonArray = new JSONArray(spinner_data); final String[] array_spinner = new String[jsonArray.length()]; for (int i=0; i<jsonArray.length(); i++) { String styleValue = jsonArray.getJSONArray(i).getString(0); Log.d(TAG, styleValue); array_spinner[i] = styleValue; } ArrayAdapter<String> adapter = new ArrayAdapter<String> (this, android.R.layout.simple_spinner_item,array_spinner); adapter.setDropDownViewResource(R.layout.state_spinner_layout); zipspinner.setAdapter(adapter); zipspinner.setOnItemSelectedListener(new OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent,View view, int pos, long id) { int item = zipspinner.getSelectedItemPosition(); if(item != 0){ String item_value = array_spinner[item]; String spinnerContentType = "city"; String spinnerURL = "getStoreCity.php?state=" + item_value; Log.d(TAG, spinnerURL); String city_data = DataCall.getJSON(spinnerURL,spinnerContentType); Log.d(TAG, city_data); JSONArray cityArray = null; try { cityArray = new JSONArray(city_data); } catch (JSONException e) { e.printStackTrace(); } final String[] city_spinner = new String[cityArray.length()]; for (int i=0; i<cityArray.length(); i++){ String styleValue = null; try { styleValue = cityArray.getJSONArray(i).getString(0); Log.d(TAG, styleValue); } catch (JSONException e) { e.printStackTrace(); } city_spinner[i] = styleValue; } city_values = city_spinner; adapter2.notifyDataSetChanged(); String test_string = "NOTIFY UPDATE"; Log.d(TAG, test_string); } else { // finish(); } } public void onNothingSelected(AdapterView parent) { // Do nothing. } }); cityspinner.setOnItemSelectedListener(new OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent,View view, int pos, long id) { int item = zipspinner.getSelectedItemPosition(); if(item != 0){ }else{ } } public void onNothingSelected(AdapterView parent) { // Do nothing. } }); }catch (JSONException e) { e.printStackTrace(); } } }
- ¿Cómo hacer una lista emergente como un hilandero sin el hilador en androide?
- ¿Recuperando el elemento seleccionado de la hiladora?
- Establecimiento de hilanderos en fragmento
- Implementación de eventos Spinner with Butter Knife
- SetSelection en Spinner basado en rowId
- Ocultar una hilera de carga al hacer clic fuera de ella en Android
- Android Spinner: Obtener el evento de cambio de elemento seleccionado
- Spinner no aplica el atributo dropDownSelector
public class SearchActivity extends Activity { ArrayAdapter<String> adapter2; String city_values[]; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.search_layout); final Spinner zipspinner = (Spinner) findViewById(R.id.zipspinner); final Spinner cityspinner = (Spinner) findViewById(R.id.cityspinner); String city_values[] = new String[]{"Please select a state."}; adapter2 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, city_values); adapter2.setDropDownViewResource(R.layout.city_spinner_layout); cityspinner.setAdapter(adapter2); JSONArray jsonArray; final JSONArray cityArray; try { String spinnerContentType = "state"; String spinnerURL = "getStoreState.php"; String spinner_data = DataCall.getJSON(spinnerURL, spinnerContentType); jsonArray = new JSONArray(spinner_data); final String[] array_spinner = new String[jsonArray.length()]; for (int i = 0; i < jsonArray.length(); i++) { String styleValue = jsonArray.getJSONArray(i).getString(0); array_spinner[i] = styleValue; } ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, array_spinner); adapter.setDropDownViewResource(R.layout.state_spinner_layout); zipspinner.setAdapter(adapter); zipspinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { int item = zipspinner.getSelectedItemPosition(); String item_value = array_spinner[item]; String spinnerContentType = "city"; String spinnerURL = "getStoreCity.php?state=" + item_value; String city_data = DataCall.getJSON(spinnerURL, spinnerContentType); cityArray = new JSONArray(city_data); //The final local variable cityArray cannot be assigned, since it is defined in an enclosing type final String[] city_spinner = new String[cityArray.length()]; for (int i = 0; i < cityArray.length(); i++) { String styleValue = cityArray.getJSONArray(i).getString(0); //Unhandled exception type JSONException city_spinner[i] = styleValue; } city_values = city_spinner; //Unhandled exception type JSONException adapter2.notifyDataSetChanged(); } public void onNothingSelected(AdapterView parent { // Do nothing. } }); } catch (JSONException e) { e.printStackTrace(); } } }
ahora intenta
Bueno, así es como voy a sugerir,
En primer lugar compruebe que está obteniendo valores en city_values
. A continuación, notifique al adaptador …. adapter2.notifyDataSetChanged();
Y finalmente cityspinner.setSelection(0);
UPDATE:
Yo sugeriría trake ArrayList<String> instead of String[]
Gracias…
Declare la variable city_array
en el lugar donde se asigna un new JSONArray()
. De todos modos lo está utilizando temporalmente. Simplemente vuelva a ajustar el adaptador.
- ¿Es posible agregar dos pasarelas predeterminadas diferentes en la tabla de enrutamiento para dos NIC diferentes en android?
- Android – descargar el archivo JSON de url