1

ユーザーが習慣をリストし、その習慣を再び実行するまで待機する目標タイマーを作成できるアプリがあります。目標作成アクティビティには、選択できる習慣のスピナーがあります。私はそれを移入するために以下を使用しています:

protected void onCreate(Bundle bundle) {
  ⋮
  mHabitSelect = (Spinner) findViewById(R.id.habit);

  String[] queryCols = new String[] { HabitTable.TABLE_HABIT + "." + HabitTable.COLUMN_ID, HabitTable.COLUMN_NAME };
  String[] from = new String[] { HabitTable.COLUMN_NAME };
  int[] to = new int[] { R.id.label };

  Cursor cursor = getContentResolver().query(MyHabitContentProvider.HABITS_URI, queryCols, null, null, null);
  SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, R.layout.habit_select_row, cursor, from, to, 0);
  mHabitSelect.setAdapter(mAdapter);

  mHabitSelect.setOnItemSelectedListener(this);
}

メソッドにはonItemSelected、データベース ID と思われる id パラメータがあります。

public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
  long databaseId = id;
}

これにより、データベースに保存する値が得られますが、編集インターフェイスをロードするときに、データベースから保存された習慣にスピナーを設定するメソッドが必要です。

private void fillData(Uri uri) {
  String[] projection = { GoalTable.COLUMN_HABIT_ID, GoalTable.COLUMN_TIME, GoalTable.TABLE_GOAL + "." + GoalTable.COLUMN_DESCRIPTION };
  Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
  if (cursor != null) {
    cursor.moveToFirst();

    int habitId = cursor.getInt(cursor.getColumnIndexOrThrow(GoalTable.COLUMN_HABIT_ID));
    //mHabitSelect.setSelection(habitId);
    ⋮
  }
}

結果を繰り返し処理して、どのデータベース ID がスピナーのどの位置にあるかを把握する必要はありませんか?

4

2 に答える 2

0

私がやったことは、アイテムを繰り返し処理して位置を取得することです:

int habitId = cursor.getInt(cursor.getColumnIndexOrThrow(GoalTable.COLUMN_HABIT_ID));
for(int pos = mAdapter.getCount(); pos >= 0; pos--) {
  if(mAdapter.getItemId(pos) == habitId) {
    mHabitSelect.setSelection(pos);
    break;
  }
}
于 2013-09-23T15:14:53.383 に答える