开发者

notifyDataSetChanged() not updating my array for my spinner

开发者 https://www.devze.com 2023-04-05 06:43 出处:网络
QUESTION: If I set a variable prior to the onCreate can I use notifyDataSetChanged() to update an adapter that uses that array later?

QUESTION: If I set a variable prior to the onCreate can I use notifyDataSetChanged() to update an adapter that uses that array later?

I am instigating my city_values array prior to my onCreate -This is the only way I can get the script not to show any errors. But once the user selects a state from its spinner it should use notifyDataSetChanged() to update the adapter that attaches the city_values array. Below is a small section of my code. I think my issue has to do with the city_value being set to early. How can I get around this?

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 o开发者_运维问答f 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();


It would be better to declare an ArrayList and then add the content in ArrayList and set the data to the adapter and notify.

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

Now if you want to update another spinner on this cityspinner selected item, you can take another ArrayList in the same way and add the items in that and set the Adapter.

UPDATE

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

And, now you will have your new values in city_spinner_array. So, set the adapter and you did for the previous spinner.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号