У меня есть два spinners, так что мой второй счетчик меняет параметры, которые он может предложить в соответствии с пунктом, выбранным в первом счетчике. Легко?Spinner with sub-spinner не работает как ожидалось
Пример: Если я выбираю «a» в главном счетчике, субпараметр должен показывать «a1» в качестве опции. Если я выберу «b» в главном счетчике, субпараметр должен отображать «b1», «b2» в качестве параметров. Если я выбираю «c» в главном счетчике, sub spinner должен отображать «c1», «c2», «c3» в качестве параметров.
Я использую библиотеку под названием SearchableSpinner, но это не имеет значения, так как это работает так же, как Android-счетчик.
public class PostComplaint extends AppCompatActivity {
String[] problems_main = {"a","b","c"};
String[][] problems_sub = {{"a1"},{"b1","b2"},{"c1","c2","c3"}};
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_post_complaint);
spinner_main = (SearchableSpinner)findViewById(R.id.spinner_main);
spinner_sub = (SearchableSpinner) findViewById(R.id.spinner_sub);
ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, problems_main);
spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner_main.setAdapter(spinnerAdapter);
spinnerAdapter.notifyDataSetChanged();
spinner_main.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
setSubSpinner(position);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
Toast.makeText(PostComplaint.this, "Nothing selected", Toast.LENGTH_SHORT).show();
}
});
}
void setSubSpinner(int i){
String[] myArray = problems_sub[i]; //Note: problems_sub is a two dimensional array
ArrayAdapter<String> spinnerAdapter_sub = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, myArray);
spinnerAdapter_sub.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner_sub.setAdapter(spinnerAdapter_sub);
spinnerAdapter_sub.notifyDataSetChanged();
}
Проблема: Какой элемент я нажимаю на основной блесны в первый раз, в соответствии с этим выбирается вспомогательный счетчик. Затем, если я сменю главный счетчик, дополнительный счетчик не изменится.
Вопрос раскрывается для предложений. Комментарий, если это не понятно.
попробуйте с этим первым invalidateDataSet, а затем снова добавьте –
@VivekMishra. Вы имеете в виду 'spinner_sub.invalidateDataSet()'? –
да как это как данные в нем в зависимости от старого счетчика. вы сначала удаляете эти данные, а затем добавляете новый –