我在一个android项目上工作,我正在使用一个旋转器,它使用一个从数据库填充的数组适配器。

我不知道如何从列表中以编程方式设置所选项目。例如,如果在旋转器中有以下项目:

类别1 第二类 3级

当创建屏幕时,我如何通过编程使类别2成为所选项目。我在想它可能类似于c#的i.e. Spinner。SelectedText = "Category 2"但似乎没有任何方法类似于Android。


当前回答

这招对我很管用:

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

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

其他回答

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

大多数时候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);
  }
});

你可以像这样简单地设置:spinner.setSelection(1),而不是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);
        }
    }
}

这招对我很管用:

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

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