以编程方式设置微调器的选定项目

我正在一个Android项目,我正在使用一个微调,它使用从数据库中填充的数组适配器。

我找不到如何从列表中以编程方式设置选定的项目。 例如,如果在微调,我有以下几点:

  • 类别1
  • 类别2
  • 类别3

如何在创build屏幕时以编程方式将类别2设置为所选项目。 我想这可能是类似于C#IE的Spinner.SelectedText =“类别2”,但似乎没有任何类似于Android的这种方法。

使用下面的代码: spinnerObject.setSelection(INDEX_OF_CATEGORY2)

没有任何一个答案给了我解决scheme,只有这样做:

  mySpinner.post(new Runnable() { @Override public void run() { mySpinner.setSelection(position); } }); 
 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; } } } 

你可以使用上面的:

 selectSpinnerItemByValue(spinnerObject, desiredValue); 

当然你也可以直接select索引

 spinnerObject.setSelection(index); 

一些解释(至less对于片段 – 从来没有尝试纯粹的活动)。 希望它能帮助别人更好地理解Android。

阿伦·乔治最受欢迎的答案是正确的,但在某些情况下不起作用。
Marco HC的答案使用了Runnable,这是由于额外的CPU负载所致。

答案是 – 你应该简单地select正确的地方来调用setSelection() ,例如它适用于我:

 @Override public void onResume() { super.onResume(); yourSpinner.setSelection(pos); } 

但是它不会在onCreateView()中工作 。 我怀疑这是对这个话题感兴趣的原因。

秘密是,用Android你不能做任何你想要的任何方法 – oops 🙁 – 组件可能只是没有准备好。作为另一个例子 – 你不能在onCreateView()或onResume()()中滚动ScrollView。在这里看到答案)

要find一个值并select它:

 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; } } } 

为什么不使用数据库中的值并将它们存储在ArrayList中,然后使用:

 yourSpinner.setSelection(yourArrayList.indexOf("Category 1")); 

你可以像我在我的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); } } } 

我有一个SimpleCursorAdapter,所以我必须复制数据,以便在本文中使用respose。 所以,我build议你试试这个方法:

 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(spinner_adapter.getPosition(selected_value)+1); 

你可以像这样轻松设置:spinner.setSelection(1),而不是1,你可以设置你想要显示的列表的任何位置。

如果你有一个联系人列表,你可以这样做:

 ((Spinner) view.findViewById(R.id.mobile)).setSelection(spinnerContactPersonDesignationAdapter.getPosition(schoolContact.get(i).getCONT_DESIGNATION())); 

我知道已经回答了,但简单的代码来select一个项目,很简单:

 spGenre.setSelection( ( (ArrayAdapter) spGenre.getAdapter()).getPosition(client.getGenre()) ); 
  for (int x = 0; x < spRaca.getAdapter().getCount(); x++) { if (spRaca.getItemIdAtPosition(x) == reprodutor.getId()) { spRaca.setSelection(x); break; } } 

就我而言,这段代码拯救了我的一天:

 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; } } } 

这对我工作:

 @Override protected void onStart() { super.onStart(); mySpinner.setSelection(position); } 

它类似于@ sberezin的解决scheme,但在onStart()中调用setSelection()。