如何通过id而不是位置设置Spinner的选项

8

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

当我要保存用户的选择时,我计划保存正在填充到我的SimpleCursorAdapter中的行id。

我使用以下代码来获取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;
    }
}

你的城镇与哪些其他数据(如果有)相关联? 城镇列表是否可能随时更改? - Squonk
城镇列表可能会发生变化。我也可以在同一张表中拥有州的信息。 - zachariahyoung
3个回答

2
我认为你已经自己回答了这个问题!只需使用你发布的代码编写自己的setSelectionByItemId方法即可。

0

Android Spinner 根据值设置选定项

Spinner 提供了一种使用 setSelection(int position) 方法根据位置设置选定值的方式。现在,要根据值获取位置,您必须遍历 Spinner 并获取位置。以下是一个示例:

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

如果您正在使用ArrayList作为Spinner适配器,那么可以使用它来循环并获取索引。另一种方法是循环适配器条目。

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


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接