2011-11-10 47 views
6

Tôi phải phát triển chế độ xem android sao cho tôi có 2 nút điều khiển xoay vòng trong đó, một cho trạng thái và thứ hai cho các thành phố.(động) Nhiều tiểu bang/thành phố spinners

Câu hỏi của tôi là, làm thế nào tôi có thể tự động điền thành phố spinner mỗi khi một tiểu bang được chọn?

Logic đằng sau nó là gì?

string.xml của tôi:

<?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 của tôi:

<?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> 

Và tập tin activity.java tôi:

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

    } 
} 

Trả lời

5

Dưới đây là cách chính xác thân yêu ....

tôi đã viết tất cả các tiểu bang và thành phố cần thiết trong string_arays ....

như

<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 

sau đó trong xml chính bổ sung 2 spinners cho cả hai. tôi tin rằng tất cả các bạn có thể làm tôi đơn giản, na?

sau đó tôi có main.xml của tôi như ...

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

Chỉ cần kiểm tra một cái nhìn và làm điều đó một mình ... Hope điều này sẽ giúp u một chút ...

k người bạn thân .. Sujith

1

Bạn phải làm bước folloowing

  1. tạo nguồn dữ liệu của các thành phố (cơ sở dữ liệu hoặc trong hashmap ("state", "city")).

  2. đặt setOnItemSelectedListener (listener) thành spinner chứa các trạng thái.

  3. phương thức onItemSelected() của người nghe trên tìm nạp dữ liệu từ dữ liệu được tạo trong bước đầu tiên và đính kèm dữ liệu đó vào spinner thành phố.

thats it.

+0

bạn có thể breif không? i am mới cho android ... –

+0

xem câu trả lời của tôi, mà explicits các bước 2 và 3. - NB có một lỗi trên bước 1: nó cần phải là một HashMap >;) – Guillaume

+0

cảm ơn Guillaume cho sửa chữa –

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: coded trong trình soạn thảo StackOverflow, có thể có một số lỗi cú pháp :)

Để tra cứu các thành phố cho mỗi tiểu bang, sử dụng bất kỳ phương pháp nào bạn muốn: bạn có thể xác định chúng trong nhiều chuỗi mảng nguồn lực, hoặc nhận được chúng từ một cơ sở dữ liệu, vv

10

Ví dụ:

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

     } 
    }); 

Bây giờ,

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

Đây là ví dụ đơn giản nhất.Bạn có thể đặt city_optionsstate_options từ cơ sở dữ liệu của mình.và sau đó bạn có thể sử dụng nó để điền vào người quay vòng đăng ký.

+0

Cảm ơn bạn rất nhiều thân yêu .... –

+0

Có nó thân yêu ...... –

+0

thực sự tôi mới vào trang web này. bất cứ ai có thể nói làm thế nào tôi có thể chấp nhận câu trả lời thứ? –

Các vấn đề liên quan