2011-11-10 13 views
6

Tengo que desarrollar una vista de Android que tenga 2 controles giratorios, uno para el estado y el segundo para las ciudades.(dinámico) Múltiples hilanderos estado/ciudad

Mi pregunta es, ¿cómo puedo poblar el girador de ciudad automáticamente cada vez que se selecciona un estado?

¿Cuál es la lógica detrás de esto?

Mi string.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
<string name="spinner_category"></string> 
<string-array name="category_state"> 
    <item >kerala</item> 
    <item >tamil nadu</item> 
    <item >Andra Pradesh</item> 
    <item >karnataka</item> 
</string-array> 
</resources> 

Mi main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 

    <LinearLayout android:orientation="horizontal" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"> 
     <TextView android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:padding="10dip" 
      android:text="Select : "/> 
     <Spinner android:layout_width="250dip" 
      android:layout_height="wrap_content" 
      android:id="@+id/spinner_state"/> 
    </LinearLayout> 

<LinearLayout android:orientation="horizontal" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"> 
     <TextView android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:padding="10dip" 
      android:text="Select : "/> 
     <Spinner android:layout_width="250dip" 
      android:layout_height="wrap_content" 
      android:id="@+id/spinner_state"/> 
    </LinearLayout> 
</LinearLayout> 

Y mi archivo activity.java:

package com.converter; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.ArrayAdapter; 
import android.widget.Spinner; 

public class ConverterActivity extends Activity 
{ 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Spinner spinner_s = (Spinner)findViewById(R.id.spinner_state); 
     ArrayAdapter<CharSequence> category_adapter = ArrayAdapter.createFromResource(
       this, R.array.category_array, android.R.layout.simple_spinner_item); 
     category_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinner_s.setAdapter(category_adapter); 

    } 
} 

Respuesta

5

Aquí es la forma correcta querida ....

que había escrito todos los estados y ciudades se necesitan en string_arays ....

como

<string-array name="State_array"> 
      <item >s1</item> 
      <item >s2</item> 
      <item >s3</item> 
      <item >s4</item> 
    </string-array> 
//then cities array for each states, like 
<string-array name="State1Cities_array"> 
      <item >c11</item> 
      <item >c12</item> 
      <item >c15</item> 
      <item >c13</item> 
    </string-array> 
<string-array name="State2Cities_array"> 
      <item >c1</item> 
      <item >c2</item> 
      <item >c5</item> 
      <item >c3</item> 
    </string-array> 

// and so on for all the states 

después en XML principal agregado 2 hilanderos para ambos. creo en todo lo que puedes hacer yo simple, na?

entonces tengo mi main.xml como ...

spinner_states_activity = (Spinner)findViewById(R.id.spinner_states_main); 
     spinner_states_activity.setOnItemSelectedListener(this); 
     adapter = ArrayAdapter.createFromResource(
       this, R.array.state_array, android.R.layout.simple_spinner_item); 
     adapter.setDropDownViewResource(R.layout.myspinner); 
// my layout for spinners u can use urs or defalut. k? 
     spinner_states_activity.setAdapter(adapter); 

spinner_cities_activity = (Spinner)findViewById(R.id.spinner_cities_main); 
     spinner_cities_activity.setOnItemSelectedListener(this); 

//and in function onItemSelected 

     int pos,pos2; 
     pos = spinner_states_activity.getSelectedItemPosition(); 
     int iden=parent.getId(); 
     if(iden==R.id.spinner_states_main) 
     { 
      pos2 = 0; 
      switch (pos) 
      { 
       case 0: unit_adapter= ArrayAdapter.createFromResource(
          this, R.array.States1Cities_array, android.R.layout.simple_spinner_item); 
         break; 
       case 1: unit_adapter= ArrayAdapter.createFromResource(
          this, R.array.States3Cities_array, android.R.layout.simple_spinner_item); 
         break; 
         // all the StatesxCities entires.... 
       default: 
         break; 
      } 

      spinner_cities_activity.setAdapter(unit_adapter); 
      unit_adapter.setDropDownViewResource(R.layout.myspinner); 
     } 

Sólo echa un vistazo y hacerlo por ti mismo ... Esperamos que esto ayuda u un poco ...

k queridos amigos .. Sujith

1

que tiene que hacer el paso folloowing

  1. crear una fuente de datos de ciudades (ya sea base de datos o en hashmap ("estado", "ciudad")).

  2. establece setOnItemSelectedListener (listener) para los estados que contienen spinner.

  3. onItemSelected() método del listner anterior obtener los datos de datasouce creado en el primer paso y adjuntarlo a city spinner.

eso es todo.

+0

puede u breif ella? Soy nuevo en Android ... –

+0

ver mi respuesta, que explicita los pasos 2 y 3. - NB hay un error en el paso 1: debe ser un HashMap >;) – Guillaume

+0

agradece a Guillaume por la corrección –

1
public class ConverterActivity extends Activity { 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Spinner citySpinner = (Spinner)findViewById(R.id.spinner_city); 
     final ArrayAdapter<String> cityAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, new String[]); // starts empty 
     city_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinner_city.setAdapter(city_adapter); 

     Spinner categorySpinner = (Spinner)findViewById(R.id.spinner_state); 
     final ArrayAdapter<String> categoryAdapter = ArrayAdapter.createFromResource(
       this, R.array.category_array, android.R.layout.simple_spinner_item); 
     categoryAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     categorySpinner.setAdapter(category_adapter); 
     categorySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
       String selectedState = parent.getItemAtPosition(position); 
       cityAdapter.clear(); // remove previous entries 
       // look up your cities for the state selectedState, using your own method 
       cityAdapter.add(the cities you want); // do that in a loop for all your cities 
       cityAdapter.notifyDataSetChanged(); 
      }; 
      @Override 
      public void onNothingSelected(AdapterView<?> parent) { 
       // do nothing 
      } 
     }); 
    } 
} 

NB: codificado en el editor de stackoverflow, puede haber algunos errores de sintaxis :)

para buscar las ciudades de cada estado, utilizar cualquier método que desea: puede definir en múltiples cuerdas-array recursos, o las obtenga de una base de datos, etc.

10

Ejemplo:

Spinner city=(Spinner)findViewById(R.id.citySpinner); 
    Spinner state=(Spinner)findViewById(R.id.stateSpinner); 

    final ArrayList<String> state_options=new ArrayList<String>(); 
    final ArrayList<String> city_options=new ArrayList<String>(); 

    state_options.add("state_1"); 
    state_options.add("state_2"); 
    state_options.add("state_3"); 
    // Here you can also get a cursor and add Strings as options to state_options instead of what i have done 

    city_options.add("city_1_state_1"); 
    city_options.add("city_2_state_1"); 
    city_options.add("city_3_state_1"); 
    // Here you can also get a cursor and add Strings as options to city_options instead of what i have done 

    ArrayAdapter<String> cityAdapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_item,city_options); 
    city.setAdapter(cityAdapter); 

    ArrayAdapter<String> stateAdapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_item,state_options); 
    state.setAdapter(stateAdapter); 

    state.setOnItemSelectedListener(new OnItemSelectedListener() { 

     @Override 
     public void onItemSelected(AdapterView<?> arg0, View view, 
         int position, long id) { 

      String stateName=state_options.get(position).toString(); 
       resetCity(stateName);        
     } 

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

     } 
    }); 

Ahora,

public void resetCity(String stateName) 
{  
     city_options.removeAll(city_options);//i haven't checked this. 
     if(stateName.eqauls("state_1")) 
     { 
      city_option.add("city_1_state_1"); 
      city_options.add("city_2_state_1"); 
      city_options.add("city_3_state_1"); 
      //you can also get a cursor and add Strings as options to city_options instead of what i have done 
     } 
     else if(stateName.eqauls("state_2")) 
     { 
      city_option.add("city_1_state_2"); 
      city_options.add("city_2_state_2"); 
      city_options.add("city_3_state_2"); 
      // you can also get a cursor and add Strings as options to city_options instead of what i have done 
     } 
     else 
     { 
      city_option.add("city_1_state_3"); 
      city_options.add("city_2_state_3"); 
      city_options.add("city_3_state_3"); 
      //you can also get a cursor and add Strings as options to city_options instead of what i have done 
     } 

     ArrayAdapter<String> cityAdapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_item,city_options); 
     city.setAdapter(cityAdapter); 
} 

Este es el ejemplo más simple. Puede establecer su city_options y state_options desde su base de datos.y luego puede usarlo para rellenar hilanderos.

+0

Muchas gracias querido .... –

+0

Lo tengo querido ...... –

+0

en realidad soy nuevo en este sitio. ¿Alguien puede decir cómo puedo aceptar la respuesta? –