[英]Spinner item not set to default when select other parent spinner
I'm a newbie to android programming.我是 android 编程的新手。 It might be a silly question.
这可能是一个愚蠢的问题。 I've made 2 spinner items.
我制作了 2 个微调器项目。 When selecting first spinner, the second spinner item view not get refreshed at the first time.
选择第一个微调器时,第二个微调器项目视图不会在第一次刷新。 But the content of second spinner shows correctly!
但第二个微调器的内容显示正确!
public class SpinnerActivity extends AppCompatActivity {
Spinner spinner,spinner1;
TextView textView;
String jsonString=null;
JSONObject jsonObject;
ArrayList<String> countries;
ArrayList<String> cities;
ArrayAdapter arrayAdapter;
ArrayAdapter arrayAdapter1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_spinner);
textView=findViewById(R.id.textView5);
spinner=findViewById(R.id.spinner);
spinner1=findViewById(R.id.spinner1);
countries=new ArrayList<>();
cities=new ArrayList<>();
jsonString=getStringFromJsonFile();
arrayAdapter=getCountryFromJson();
spinner.setAdapter(arrayAdapter);
spinner.setPrompt("Select Country");
arrayAdapter1=getCityFromCountry("Afghanistan");
spinner1.setAdapter(arrayAdapter1);
spinner1.setPrompt("Select City");
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
arrayAdapter1=getCityFromCountry(countries.get(position));
textView.setText(cities.get(0));
arrayAdapter.notifyDataSetChanged();
arrayAdapter1.notifyDataSetChanged();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
textView.setText(cities.get(position));
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
public ArrayAdapter getCityFromCountry(String s) {
try {
cities.clear();
JSONArray cityJR=jsonObject.getJSONArray(s);
for(int i=0;i<cityJR.length();i++)
{
cities.add(cityJR.get(i).toString());
}
Collections.sort(cities);
} catch (JSONException e) {
e.printStackTrace();
}
return new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, cities);
}
@Override
public void onBackPressed() {
super.onBackPressed();
overridePendingTransition(R.anim.slide_from_left,R.anim.slide_to_right);
}
public String getStringFromJsonFile(){
try {
InputStream jsonIpStream=getApplicationContext().getAssets().open("countries.txt");
byte[] bytes = new byte[1000];
StringBuilder x = new StringBuilder();
int numRead = 0;
while ((numRead = jsonIpStream.read(bytes)) >= 0) {
x.append(new String(bytes, 0, numRead));
}
return x.toString();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public ArrayAdapter getCountryFromJson(){
try {
countries.clear();
jsonObject=new JSONObject(jsonString);
JSONArray countryJR=jsonObject.names();
for(int i = 0; i<countryJR.length(); i++)
{
countries.add(countryJR.get(i).toString());
}
Collections.sort(countries);
} catch (JSONException e) {
e.printStackTrace();
}
return new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, countries);
}
}
In the below code:在下面的代码中:
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
arrayAdapter1=getCityFromCountry(countries.get(position));
textView.setText(cities.get(0));
arrayAdapter.notifyDataSetChanged();
arrayAdapter1.notifyDataSetChanged();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
Replace this line替换此行
arrayAdapter1.notifyDataSetChanged();
with和
spinner1.setAdapter(arrayAdapter1);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.