我有一个带有自定义适配器的微调器,用于显示数据库中的对象。 当对象列表更改时,我使用List创建一个新的适配器并将其应用于微调器。然后选择了第一个项目,所以我尝试了这个:
// 5th item selected
int pos = spinner.getSelectedItemPosition();
spinner.setAdapter(newAdapter);
// 0th item selected
spinner.setSelectedItem(pos);
// 5th item is selected
但GUI仍显示第一项?
spinner.invalidate()
没有帮助。
这是实现我想要的正确方法吗?我真的找不到有关此行为的任何信息。
答案 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()