【问题标题】:notifyDataSetChanged() not updating my array for my spinnernotifyDataSetChanged() 没有为我的微调器更新我的数组
【发布时间】:2018-05-22 18:37:04
【问题描述】:

问题:如果我在onCreate 之前设置了一个变量,我可以使用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();

【问题讨论】:

    标签: java android spinner adapter


    【解决方案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&lt;String&gt; city_spinner_array = new ArrayList&lt;String&gt;;

    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 中获得新值。所以,设置适配器,就像之前的微调器一样。

    【讨论】:

    • 您的建议是有道理的,但是如何将 city_spinner[] 放入作为字符串的 city_values 中?我更新了显示城市名称如何保存在数组中的问题。
    猜你喜欢
    • 1970-01-01
    • 2023-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    • 2011-12-16
    • 1970-01-01
    • 2019-07-22
    相关资源
    最近更新 更多