2011-09-17 9 views
0

質問:onCreateの前に変数を設定すると、後でその配列を使用するアダプタを更新するのにnotifyDataSetChanged()を使用できますか?notifyDataSetChanged()は私のスピナーの配列を更新しません

私はonCreateの前に私のcity_values arrayを扇動しています - これは私がエラーを表示しないようにスクリプトを得ることができる唯一の方法です。しかし、ユーザーがスピナーから状態を選択すると、notifyDataSetChanged()を使用して、city_values配列をアタッチするアダプターを更新する必要があります。以下は私のコードの小さな部分です。私は自分の問題はcity_valueを早めに設定しなければならないと思う。どうすればこの問題を回避できますか?

public class SearchActivity extends Activity{ 
    ArrayAdapter<String> adapter2; 
    String city_values[] = new String[]{"Please select a state first."}; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.search_layout) 

      adapter2 = new ArrayAdapter<String> (this,android.R.layout.simple_spinner_item, city_values); 
      adapter2.setDropDownViewResource(R.layout.city_spinner_layout); 
      cityspinner.setAdapter(adapter2); 


//On select of State spinner use item value to query and get citys reassign those values back to city_values and then tell adapter2 notifyDataSetChanged() 


      for (int i=0; i<jsonArray.length(); i++) 
      { 
       String styleValue = jsonArray.getJSONArray(i).getString(0);  
       Log.d(TAG, styleValue); 
       city_spinner[i] = styleValue; 
      } 
       city_values = city_spinner; 

       adapter2.notifyDataSetChanged(); 

答えて

1

ArrayListを宣言し、その内容をArrayListに追加し、そのデータをアダプタに設定して通知する方がよいでしょう。あなたはこのcityspinner選択した項目に別のスピナーを更新したい場合は

public class SearchActivity extends Activity{ 
    ArrayAdapter<String> adapter2; 
    ArrayList<String> city_values = new ArrayList<String>(); 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.search_layout) 

      city_values.add("your content"); 

      adapter2 = new ArrayAdapter<String> (this,android.R.layout.simple_spinner_item, city_values); 
      adapter2.setDropDownViewResource(R.layout.city_spinner_layout); 
      cityspinner.setAdapter(adapter2); 

は今、あなたは同じように別のArrayListを取り、その中にアイテムを追加し、アダプタを設定することができます。

UPDATE 

ArrayList<String> city_spinner_array = new ArrayList<String>;

for (int i=0; i<jsonArray.length(); i++) 
      { 
       String styleValue = jsonArray.getJSONArray(i).getString(0);  
       Log.d(TAG, styleValue); 
       city_spinner_array.add(styleValue); 
      } 

を取って、今、あなたはcity_spinner_arrayに新しい価値を持つことになります。それで、アダプターをセットして、前のスピナーのためにしました。

希望、これは...、 おかげで助け

+0

あなたの提案は理にかなっているが、どのように私は、文字列である私のcity_valuesに私city_spinner []を得るのですか?都市名がどのように配列に保存されるかを示す質問を更新しました。 – Denoteone

+0

私の更新された回答を参照してください...またはカジュアルなチャットルームに来て... –

関連する問題