我在一个android项目上工作,我正在使用一个旋转器,它使用一个从数据库填充的数组适配器。
我不知道如何从列表中以编程方式设置所选项目。例如,如果在旋转器中有以下项目:
类别1 第二类 3级
当创建屏幕时,我如何通过编程使类别2成为所选项目。我在想它可能类似于c#的i.e. Spinner。SelectedText = "Category 2"但似乎没有任何方法类似于Android。
我在一个android项目上工作,我正在使用一个旋转器,它使用一个从数据库填充的数组适配器。
我不知道如何从列表中以编程方式设置所选项目。例如,如果在旋转器中有以下项目:
类别1 第二类 3级
当创建屏幕时,我如何通过编程使类别2成为所选项目。我在想它可能类似于c#的i.e. Spinner。SelectedText = "Category 2"但似乎没有任何方法类似于Android。
当前回答
如果你有一个联系人列表,你可以这样做:
((Spinner) view.findViewById(R.id.mobile)).setSelection(spinnerContactPersonDesignationAdapter.getPosition(schoolContact.get(i).getCONT_DESIGNATION()));
其他回答
大多数时候spinner.setSelection(i);//i是0到(size-1)适配器的大小 是行不通的。如果你调用spinner.setSelection(i);
这取决于你的逻辑。
如果视图是完全加载的,你想从接口调用它,我建议你调用
spinner.setAdapter(spinner_no_of_hospitals.getAdapter());
spinner.setSelection(i); // i is 0 or within adapter size
或者,如果您想在活动/片段生命周期之间进行更改,请像这样调用
spinner.post(new Runnable() {
@Override public void run() {
spinner.setSelection(i);
}
});
这招对我很管用:
@Override
protected void onStart() {
super.onStart();
mySpinner.setSelection(position);
}
它类似于@sberezin的解决方案,但在onStart()中调用setSelection()。
我有一个SimpleCursorAdapter,所以我必须复制在这篇文章中使用响应的数据。所以,我建议你试试这个方法:
for (int i = 0; i < spinnerRegion.getAdapter().getCount(); i++) {
if (spinnerRegion.getItemIdAtPosition(i) == Integer
.valueOf(signal.getInt(signal
.getColumnIndexOrThrow("id_region")))) {
spinnerRegion.setSelection(i);
break;
}
}
我认为这是一个真正的方法
你可以像这样简单地设置:spinner.setSelection(1),而不是1,你可以设置你想要显示的列表的任何位置。
在我的例子中,这段代码拯救了我:
public static void selectSpinnerItemByValue(Spinner spnr, long value) {
SpinnerAdapter adapter = spnr.getAdapter();
for (int position = 0; position < adapter.getCount(); position++) {
if(adapter.getItemId(position) == value) {
spnr.setSelection(position);
return;
}
}
}