notifyDataSetChanged () не обновляет мой массив для моего счетчика - PullRequest
0 голосов
/ 17 сентября 2011

ВОПРОС: Если я задаю переменную до onCreate, могу ли я использовать notifyDataSetChanged() для обновления адаптера, который использует этот массив позже?

Я провоцирую свои city_values array до моего onCreate -Это единственный способ заставить скрипт не показывать никаких ошибок.Но как только пользователь выбирает состояние из своего счетчика, он должен использовать 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 Ответ

1 голос
/ 17 сентября 2011

Было бы лучше объявить ArrayList, а затем добавить содержимое в ArrayList и установить данные для адаптера и уведомить.

 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.Итак, установите адаптер, и вы сделали для предыдущего счетчика.

...