如何通过id而不是位置设置微调器选择

时间:2010-12-11 22:14:33

标签: android

我创建了一个简单的Spinner将其绑定到SimpleCursorAdapter。我正在使用内容提供商的城镇列表填充SimpleCursorAdapter

当我去保存用户选择时,我打算将正在填充的行ID保存到我的SimpleCursorAdapter

我正在使用以下代码获取ID。

townSpinner.getSelectedItemId();

我无法弄清楚当我拉回保存的项目时如何最好地设置选择。

以下代码有效,但只按位置编号设置选择。

townSpinner.setSelection(2);

我应该创建一个循环来根据Id确定正确的位置值吗?

long cityId = Long.parseLong(cursor.getString(CityQuery.CITY_ID));

             for (int i = 0; i < citySpinner.getCount(); i++) {              
              long itemIdAtPosition2 = citySpinner.getItemIdAtPosition(i);
              if (itemIdAtPosition2 == cityId) {
               citySpinner.setSelection(i);
               break;
        }
}

3 个答案:

答案 0 :(得分:2)

我想你已经回答了自己的问题! 只需使用您发布的代码编写自己的setSelectionByItemId方法

答案 1 :(得分:0)

示例:

DB:
    public Cursor getData() {
        SQLiteDatabase db = getReadableDatabase();
        String sql = "select ID _id, Name from MyTable order by Name ";
        Cursor c = db.rawQuery(sql, null);
        c.moveToFirst();
        return c;
    }   

Activity:

        Cursor myCursor = db.getData();

        SimpleCursorAdapter adapter1 = new SimpleCursorAdapter(
          this, 
          android.R.layout.simple_spinner_item, 
          myCursor,
          new String[] { "Name" }, new int[] { android.R.id.text1 }, 0);

        adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        mySpinner.setAdapter(adapter1);         

        for(int i = 0; i < adapter1.getCount(); i++)
        {
            if (adapter1.getItemId(i) == myID )
            {
                mySpinner.setSelection(i, false); //(false is optional)
                break;
            }
        }   

答案 2 :(得分:0)

Android Spinner按值设置选定项

微调器提供一种使用setSelection(int position)方法基于位置设置所选值的方法。现在,要基于某个值获取位置,您必须遍历微调器并获取位置。这是一个示例

  mySpinner.setSelection(getIndex(mySpinner, myValue));
  private int getIndex(Spinner spinner, String myString){

 int index = 0;

 for (int i=0;i<spinner.getCount();i++){
  if (spinner.getItemAtPosition(i).equals(myString)){
   index = i;
   }
 }
return index;
}

如果您的Spinner Adapter使用ArrayList,则可以使用它遍历并获取索引。另一种方法是遍历适配器条目

    Spinner s = (Spinner) findViewById(R.id.spinner_id);
    for(i=0; i < adapter.getCount(); i++) {
     if(myString.trim().equals(adapter.getItem(i).toString())){
       s.setSelection(i);
       break;
    }
  }