java 选择状态后使用 notifyDataSetChanged 更新 City Spinner
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/7370107/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Update City Spinner with notifyDataSetChanged after state is selected
提问by Denoteone
How do I update my city spinner once the user selects a state?
一旦用户选择了一个州,我该如何更新我的城市微调器?
Both fields are populated using a DataCall.class
that returns JSON
data and parses the info into an array for the spinner.
这两个字段都使用 a 填充,该 aDataCall.class
返回JSON
数据并将信息解析为微调器的数组。
My code below sets the city adapter
to a defualt "Select State"value and once the user gets selects the state it should use notifyDataSetChanged since the default array for the city spinner is updated with the new city names. The errors I am getting are commented in my code below.
我下面的代码将城市adapter
设置为默认的“选择状态”值,一旦用户选择了状态,它应该使用 notifyDataSetChanged 因为城市微调器的默认数组已使用新城市名称更新。我收到的错误在下面的代码中进行了注释。
public class SearchActivity extends Activity{
private static final String TAG = "MyApp";
ArrayAdapter<String> adapter2;
String city_values[] = new String[]{"Please select a state."};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.search_layout);
final Spinner zipspinner = (Spinner) findViewById(R.id.zipspinner);
final Spinner cityspinner = (Spinner) findViewById(R.id.cityspinner);
adapter2 = new ArrayAdapter<String> (this,android.R.layout.simple_spinner_item, city_values);
adapter2.setDropDownViewResource(R.layout.city_spinner_layout);
cityspinner.setAdapter(adapter2);
JSONArray jsonArray;
try {
String spinnerContentType = "state";
String spinnerURL = "getStoreState.php";
String spinner_data = DataCall.getJSON(spinnerURL,spinnerContentType);
Log.d(TAG, spinner_data);
jsonArray = new JSONArray(spinner_data);
final String[] array_spinner = new String[jsonArray.length()];
for (int i=0; i<jsonArray.length(); i++) {
String styleValue = jsonArray.getJSONArray(i).getString(0);
Log.d(TAG, styleValue);
array_spinner[i] = styleValue;
}
ArrayAdapter<String> adapter = new ArrayAdapter<String> (this,
android.R.layout.simple_spinner_item,array_spinner);
adapter.setDropDownViewResource(R.layout.state_spinner_layout);
zipspinner.setAdapter(adapter);
zipspinner.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent,View view, int pos, long id) {
int item = zipspinner.getSelectedItemPosition();
if(item != 0){
String item_value = array_spinner[item];
String spinnerContentType = "city";
String spinnerURL = "getStoreCity.php?state=" + item_value;
Log.d(TAG, spinnerURL);
String city_data = DataCall.getJSON(spinnerURL,spinnerContentType);
Log.d(TAG, city_data);
JSONArray cityArray = null;
try {
cityArray = new JSONArray(city_data);
} catch (JSONException e) {
e.printStackTrace();
}
final String[] city_spinner = new String[cityArray.length()];
for (int i=0; i<cityArray.length(); i++){
String styleValue = null;
try {
styleValue = cityArray.getJSONArray(i).getString(0);
Log.d(TAG, styleValue);
} catch (JSONException e) {
e.printStackTrace();
}
city_spinner[i] = styleValue;
}
city_values = city_spinner;
adapter2.notifyDataSetChanged();
String test_string = "NOTIFY UPDATE";
Log.d(TAG, test_string);
} else {
// finish();
}
}
public void onNothingSelected(AdapterView parent) {
// Do nothing.
}
});
cityspinner.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent,View view, int pos, long id) {
int item = zipspinner.getSelectedItemPosition();
if(item != 0){
}else{
}
}
public void onNothingSelected(AdapterView parent) {
// Do nothing.
}
});
}catch (JSONException e) {
e.printStackTrace();
}
}
}
采纳答案by Mohammed Azharuddin Shaikh
public class SearchActivity extends Activity {
ArrayAdapter<String> adapter2;
String city_values[];
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.search_layout);
final Spinner zipspinner = (Spinner) findViewById(R.id.zipspinner);
final Spinner cityspinner = (Spinner) findViewById(R.id.cityspinner);
String city_values[] = new String[]{"Please select a state."};
adapter2 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, city_values);
adapter2.setDropDownViewResource(R.layout.city_spinner_layout);
cityspinner.setAdapter(adapter2);
JSONArray jsonArray;
final JSONArray cityArray;
try {
String spinnerContentType = "state";
String spinnerURL = "getStoreState.php";
String spinner_data = DataCall.getJSON(spinnerURL, spinnerContentType);
jsonArray = new JSONArray(spinner_data);
final String[] array_spinner = new String[jsonArray.length()];
for (int i = 0; i < jsonArray.length(); i++) {
String styleValue = jsonArray.getJSONArray(i).getString(0);
array_spinner[i] = styleValue;
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, array_spinner);
adapter.setDropDownViewResource(R.layout.state_spinner_layout);
zipspinner.setAdapter(adapter);
zipspinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
int item = zipspinner.getSelectedItemPosition();
String item_value = array_spinner[item];
String spinnerContentType = "city";
String spinnerURL = "getStoreCity.php?state=" + item_value;
String city_data = DataCall.getJSON(spinnerURL, spinnerContentType);
cityArray = new JSONArray(city_data); //The final local variable cityArray cannot be assigned, since it is defined in an enclosing type
final String[] city_spinner = new String[cityArray.length()];
for (int i = 0; i < cityArray.length(); i++) {
String styleValue = cityArray.getJSONArray(i).getString(0); //Unhandled exception type JSONException
city_spinner[i] = styleValue;
}
city_values = city_spinner; //Unhandled exception type JSONException
adapter2.notifyDataSetChanged();
}
public void onNothingSelected(AdapterView parent {
// Do nothing.
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
}
now try
现在试试
回答by Lalit Poptani
Well, this is how I will suggest,
嗯,这就是我建议的方式,
First of all check that you are getting values in city_values
.
Then, notify the adapter.... adapter2.notifyDataSetChanged();
And finally cityspinner.setSelection(0);
首先检查您是否在city_values
. 然后,通知适配器....adapter2.notifyDataSetChanged();
最后cityspinner.setSelection(0);
UPDATE:
I would suggest to trake ArrayList<String> instead of String[]
我建议去trak ArrayList<String> instead of String[]
Thanks...
谢谢...
回答by Ronnie
Declare the city_array
variable at the place where you assign a new JSONArray()
. Anyways you are using it temporarily. Just set the adapter again.
city_array
在分配 a 的位置声明变量new JSONArray()
。反正你是暂时使用它。只需重新设置适配器。