在我的活动中,我有一个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);
}
答案 0 :(得分:2)
通常在onCreate()方法中启动了微调器和适配器。此外,您必须保存微调器的状态,并在活动返回到前台时重新创建它。检查this question有关如何保存应用程序状态的信息。
答案 1 :(得分:0)
您可以保存活动状态并将其加载回来