我正在研究一个android项目,我正在使用一个使用数组适配器的微调器,该数组适配器是从数据库中填充的.
我无法找到如何从列表中以编程方式设置所选项目.例如,如果在微调器中我有以下项目:
创建屏幕时,如何以编程方式将类别2设为选定项目.我认为它可能类似于c#IE Spinner.SelectedText ="Category 2"但似乎没有任何类似于Android的方法.
Aru*_*rge 701
使用以下内容:
spinnerObject.setSelection(INDEX_OF_CATEGORY2)
.
Mar*_* HC 76
这些答案中没有一个给我解决方案,只有这个:
mySpinner.post(new Runnable() {
@Override
public void run() {
mySpinner.setSelection(position);
}
});
Run Code Online (Sandbox Code Playgroud)
Yaq*_*mad 35
public static void selectSpinnerItemByValue(Spinner spnr, long value) {
SimpleCursorAdapter adapter = (SimpleCursorAdapter) spnr.getAdapter();
for (int position = 0; position < adapter.getCount(); position++) {
if(adapter.getItemId(position) == value) {
spnr.setSelection(position);
return;
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用以上内容:
selectSpinnerItemByValue(spinnerObject, desiredValue);
Run Code Online (Sandbox Code Playgroud)
当然你也可以直接选择索引
spinnerObject.setSelection(index);
Run Code Online (Sandbox Code Playgroud)
sbe*_*zin 28
一些解释(至少对于碎片 - 从未尝试过纯活动).希望它能帮助别人更好地理解Android.
Arun George
最热门的回答是正确的,但在某些情况下不起作用.由于额外的CPU负载
,Marco HC使用Runnable 的答案是最后的手段.
答案是 - 你应该只选择正确的地方来调用setSelection(),例如它适用于我:
@Override
public void onResume() {
super.onResume();
yourSpinner.setSelection(pos);
}
Run Code Online (Sandbox Code Playgroud)
但它不能在onCreateView()中工作.我怀疑这是对这个话题感兴趣的原因.
秘诀是,使用Android,你无法在任何方法中做任何事情 - oops :( - 组件可能还没有准备好.另一个例子 - 你不能在onCreateView()和onResume()中滚动ScrollView(看到这里的答案)
Ric*_*Dev 11
为什么不使用DB中的值并将它们存储在ArrayList上,然后使用:
yourSpinner.setSelection(yourArrayList.indexOf("Category 1"));
Run Code Online (Sandbox Code Playgroud)
Fer*_*nch 11
要查找值并选择它:
private void selectValue(Spinner spinner, Object value) {
for (int i = 0; i < spinner.getCount(); i++) {
if (spinner.getItemAtPosition(i).equals(value)) {
spinner.setSelection(i);
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 7
最佳解决方案是:
public String[] items= new String[]{"item1","item2","item3"};
// here you can use array or list
ArrayAdapter adapter= new ArrayAdapter(Your_Context, R.layout.support_simple_spinner_dropdown_item, items);
final Spinner itemsSpinner= (Spinner) findViewById(R.id.itemSpinner);
itemsSpinner.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)
要获取商品的位置,请自动添加以下语句
itemsSpinner.setSelection(itemsSpinner.getPosition("item2"));
Run Code Online (Sandbox Code Playgroud)
小智 6
您可以像我在UtilityClass中那样为这种工作制作通用方法
public void SetSpinnerSelection(Spinner spinner,String[] array,String text) {
for(int i=0;i<array.length;i++) {
if(array[i].equals(text)) {
spinner.setSelection(i);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在 Kotlin 中,我找到了一个使用 lambda 的简单解决方案:
spinnerObjec.post {spinnerObjec.setSelection(yourIndex)}
Run Code Online (Sandbox Code Playgroud)
我有一个 SimpleCursorAdapter,所以我必须复制数据以使用这篇文章中的 respose。所以,我建议你试试这种方式:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这是一个真正的方式