2011-11-10 16 views
6

मुझे एक एंड्रॉइड व्यू विकसित करना है जैसे कि इसमें 2 स्पिनर नियंत्रण हैं, एक राज्य के लिए और दूसरे शहरों के लिए।(गतिशील) एकाधिक स्पिनर राज्य/शहर

मेरा सवाल यह है कि, जब भी कोई राज्य चुना जाता है तो मैं शहर स्पिनर को स्वचालित रूप से कैसे बना सकता हूं?

इसके पीछे तर्क क्या है?

मेरे 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> 

मेरे 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> 

और मेरे 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); 

    } 
} 

उत्तर

5

यहाँ सही तरीका प्रिय ....

मैं string_arays में सभी आवश्यक राज्यों और शहरों में लिखा था ....

तरह
<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 

फिर मुख्य एक्सएमएल में जोड़ा है दोनों के लिए 2 स्पिनर। मैं विश्वास करता हूं कि आप सब कुछ सरल कर सकते हैं, ना?

तो मैं के रूप में मेरे main.xml ...

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); 
     } 

बस एक नज़र की जाँच करें और खुद ही यह करना है ... आशा इस वसीयत यू एक छोटे से मदद करता है ...

कश्मीर प्यारे दोस्तों .. सुजीत

1

आप folloowing कदम क्या करना है

  1. शहरों का डेटा स्रोत बनाएं (या तो डेटाबेस या हैशमप ("राज्य", "शहर") में)।

  2. सेट किए गए राज्यों में स्पिनर के लिए सेटऑनटिम चयन किए गए लिस्टर (श्रोता) सेट करें।

  3. उपरोक्त सूची के ITemSelected() विधि पहले चरण में बनाए गए डेटासौस से डेटा प्राप्त करते हैं और इसे शहर स्पिनर से जोड़ते हैं।

यह है कि।

+0

यू यह संक्षिप्त कर सकते हैं? मैं एंड्रॉइड के लिए नया हूं ... –

+0

मेरा जवाब देखें, जो चरण 2 और 3 की व्याख्या करता है - एनबी चरण 1 पर एक त्रुटि है: इसे हैश मैप <राज्य, सूची >;) – Guillaume

+0

धन्यवाद सुधार के लिए गिलाउम –

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 
      } 
     }); 
    } 
} 

एनबी: StackOverflow संपादक में कोडित, वहाँ कुछ वाक्यविन्यास त्रुटियों :)

प्रत्येक राज्य के लिए शहरों देखने के लिए, किसी भी तरीके से आप चाहते हैं का उपयोग हो सकता है: आप उन्हें एकाधिक स्ट्रिंग सरणी में परिभाषित कर सकते हैं संसाधनों, या उन्हें एक डेटाबेस से मिलता है, आदि

10

उदाहरण:

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) { 

     } 
    }); 

अब,

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); 
} 

यह सबसे आसान उदाहरण है। आप अपने डेटाबेस से city_options और state_options सेट कर सकते हैं। और फिर आप इसे स्पिनरों को एकत्रित करने के लिए उपयोग कर सकते हैं।

+0

आपको बहुत बहुत धन्यवाद .... –

+0

इसे मिला ...... –

+0

असल में मैं इस साइट पर नया हूं। क्या कोई कह सकता है कि मैं वें जवाब कैसे स्वीकार कर सकता हूं? –

संबंधित मुद्दे