问题:如果我在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();
答案 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
中获得新值。因此,设置适配器并为前一个微调器设置。