В моей деятельности у меня есть Spinner и ListView. Spinner используется для фильтрации элементов в ListView. Когда пользователь щелкает элемент списка, вызывается другое действие, которое показывает детали элемента списка. Затем, из операции с деталями, пользователь нажимает кнопку «Назад», и счетчик (таким образом, список) возвращается к своему начальному значению.
Это связано с тем, что я заполняю адаптер счетчика и объявляю его onItemSelectedListener в метод onStart (), который вызывается снова, когда пользователь нажимает кнопку возврата. Также onItemSelectedListener фактически вызывается один раз методом onStart ().
Как мне избежать этого поведения? Думаю, мне следует переместить слушателя и адаптер куда-нибудь еще, но куда?
Вот обзор класса
public static ArrayList<String> years;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.archive);
// populate years array here
}
@Override
protected void onStart()
{
super.onStart();
Spinner spinner = (Spinner) findViewById(R.id.spinner_anni);
// create spinner adapter
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, ArchiveActivity.years);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
// create spinner listener
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> parentView,
View selectedItemView, int position, long id)
{
filterList(ArchiveActivity.years.get(position));
}
@Override
public void onNothingSelected(AdapterView<?> parentView)
{
return;
}
});
// create list listener
ListView list = (ListView) findViewById(R.id.list_archive);
list.setOnItemClickListener(this);
}
private void filterList(String year)
{
// filter list data here
}
@Override
public void onItemClick(AdapterView<?> list, View item, int pos, long id)
{
// call detail activity for list item that's been pressed
Intent i = new Intent(this, DetailActivity.class);
startActivity(i);
}