Я делаю приложение для Android, которое просит пользователей выбрать страну и город с помощью счетчика.
Сначала я получаю данные из json, например:
String state = json.data.getState();
String city = json.data.getCity();
Когдапользователь открывает приложение в первый раз, значение счетчика - это состояние строки и город строки, вот мой код:
final List<State> statesList = new ArrayList<>();
final List<String> states = new ArrayList<>();
final StateAdapter stateAdapter = new StateAdapter(this,
R.layout.state_list, R.id.spinnerText, statesList);
SpinnerCity.setAdapter(stateAdapter);
SpinnerCity.setSelect(String state); //????
SpinnerCity.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
State cityDetails = stateAdapter.getItem(position);
List<String> cityList = cityDetails.getCities();
ArrayAdapter citiesAdapter = new ArrayAdapter<>(this,
R.layout.city_list, R.id.citySpinnerText, cityList);
SpinnerArea.setAdapter(citiesAdapter);
SpinnerArea.setSelected(String city); //???
}
class StateAdapter extends ArrayAdapter<State> {
private List<State> stateList = new ArrayList<>();
public StateAdapter(@NonNull Context context, int resource, int spinnerText, @NonNull List<State> stateList) {
super(context, resource, spinnerText, stateList);
this.stateList = stateList;
}
@Override
public State getItem(int position) {
return stateList.get(position);
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull
ViewGroup parent) {
return initView(position);
}
@Override
public View getDropDownView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
return initView(position);
}
private View initView(int position) {
State state = getItem(position);
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.state_list, null);
TextView textView = view.findViewById(R.id.spinnerText);
textView.setText(state.getStateName());
return view;
}
Я просто не знаю, как сначала поместить строку в Spinner?Кстати, пользователь также может изменять штат и город с помощью счетчика, я буду сохранять информацию об изменении в объект. Спасибо.
[Редактировать] Я знаю, как установить выбор, например:
int position = stateAdapter.getPosition(statesList.get(3));
stateSpinner.setSelection(position);
если я получу данные json - String, как мне узнать StatesList.get (?)
Странно?Когда я получаю строку «Kaohsuing», я пытаюсь найти позицию в ArrayList, но я всегда получаю -1, что означает, что String не соответствует данным Arraylist.
Моя ошибка, если я хочу найти позицию в состоянии,решение:
List<String> states = new ArrayList<>();
int cityPosition = states.indexOf(City);
SpinnerCity.setSelection(cityPosition);