如何动态更新Spinner?

时间:2012-02-25 10:54:59

标签: android dynamic android-spinner

我有一个带有自定义适配器的微调器,用于显示数据库中的对象。 当对象列表更改时,我使用List创建一个新的适配器并将其应用于微调器。然后选择了第一个项目,所以我尝试了这个:

// 5th item selected
int pos = spinner.getSelectedItemPosition();
spinner.setAdapter(newAdapter);
// 0th item selected
spinner.setSelectedItem(pos);
// 5th item is selected

但GUI仍显示第一项?

spinner.invalidate()没有帮助。

这是实现我想要的正确方法吗?我真的找不到有关此行为的任何信息。

3 个答案:

答案 0 :(得分:2)

解决:我猜主要的问题是自定义微调适配器。现在工作正常

if (spinner.getCount() > 0) {
    pos = spinner.getSelectedItemPosition();
}
MySpinnerAdapter adapter = new MySpinnerAdapter(context, myNewObjects);
spinner.setAdapter(adapter);
spinner.setSelection(pos); // needed
adapter.notifyDataSetChanged();

答案 1 :(得分:1)

spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {

            spinner.setSelectedItem(5);
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub

        }
    });

答案 2 :(得分:0)

您是否尝试过notifydatasetChanged()或notifydatasetInvalidated方法的适配器。 newAdapter.notifydatasetChanged()

相关问题