Android微调器在活动更改时不保留值(与生命周期相关)

时间:2011-03-22 09:47:20

标签: java android spinner lifecycle

在我的活动中,我有一个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);
}

2 个答案:

答案 0 :(得分:2)

通常在onCreate()方法中启动了微调器和适配器。此外,您必须保存微调器的状态,并在活动返回到前台时重新创建它。检查this question有关如何保存应用程序状态的信息。

答案 1 :(得分:0)

您可以保存活动状态并将其加载回来

查看onSaveInstanceStateonRestoreInstanceState方法