notifyDataSetChanged()没有为我的微调器更新我的数组

时间:2011-09-17 04:58:46

标签: java android spinner adapter

问题:如果我在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 个答案:

答案 0 :(得分:1)

最好声明一个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);

现在,如果要在此cityspinner选定项目上更新另一个微调器,可以采用相同的方式获取另一个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中获得新值。因此,设置适配器并为前一个微调器设置。