12

SimpleCursorAdapter を介して取り込まれたスピナー ビューがあります。

選択内容に基づいて、エントリ データベースに行 ID を保存する必要があります(Spinner データベースから追​​加および削除できるため、位置は機能しません)。

これは、 を使用して実行できますspinner.getAdapter().getItemId(pos);。しかし、エントリを編集するときは、この行 ID (現在) に関連付けられているスピナーの位置を選択する必要があります。

spinner.setSelection(position);データベースのrowidに基づいて、現在のスピナーでアイテムの現在の位置を見つける方法が必要です。

4

7 に答える 7

15

Spinnerで裏打ちされたものの選択を設定する場合は、CursorAdapter内のすべての項目をループして、必要な項目Cursorを探すことができます(テーブルの主キーの名前が「_id」であると想定)。

Spinner spinner = (Spinner) findViewById(R.id.spinner);
spinner.setAdapter(new SimpleCursorAdapter(...));

for (int i = 0; i < spinner.getCount(); i++) {
    Cursor value = (Cursor) spinner.getItemAtPosition(i);
    long id = value.getLong(value.getColumnIndex("_id"));
    if (id == rowid) {
        spinner.setSelection(i);
    }
}

選択したアイテムのROWIDを取得する場合は、次のようなことを行うことができます。

Cursor cursor = (Cursor) spinner.getSelectedItem();
long rowid = cursor.getLong(cursor.getColumnIndex("_id"));

それを行うためのより速い方法があるかもしれませんが、それは私にとって常にうまくいきました。

于 2010-04-01T14:16:36.720 に答える
1

これを書いているときにアイデアがあり、スピナーにデータを入力するときにrowid->posでハッシュテーブルを作成し、それを使用しました。彼らが探しているなら、誰かを助けるかもしれません。

于 2010-04-01T11:00:26.723 に答える
1

forループの代わりに、アイテムを見つけたときにループを破ることができるので、しばらくの間は良いと思います。

int spinnerCount = spinner.getCount();
int i = 0;
while(i++ < spinnerCount) {
    Cursor value = (Cursor) spinner.getItemAtPosition(i);
    long id = value.getLong(value.getColumnIndex("_id"));
    if (id == rowid) {
        spinner.setSelection(i);
        break;
    }
}
于 2015-03-17T20:39:04.180 に答える
0

https://stackoverflow.com/a/5040748/1206052

dziobas

素晴らしい答えを提供しました..しかし、なぜ誰もそれを推奨していないのか私は驚いていません..彼の答えにいくつかの修正を加えたいだけです..

CREATE VIEW my_view2 AS
  SELECT count(*) AS row_id, q1.*
  FROM my_view AS q1
  LEFT JOIN my_view AS q2
  ON (q1._id >= q2._id)
  GROUP BY q1._id

「where」をjoinに必要な「on」に置き換えました。

これで、IDに関連付けられた位置を持つすべてのアイテムがあります。

ROW_idをsetselection() スピナーのに割り当てるだけです

于 2012-03-26T09:34:10.780 に答える
0

最初のステップでは、結合などを使用してデータセットのビューを作成します。

CREATE VIEW my_view AS
  SELECT _id, field FROM my_table

第二段階:

CREATE VIEW my_view2 AS
  SELECT count(*) AS row_id, q1.*
  FROM my_view AS q1
  LEFT JOIN my_view AS q2
  WHERE q1._id >= q2._id
  GROUP BY q1._id

次に、単純に:

SELECT * FROM my_view2

結果:

row_id | _id | field

1   4   XbMCmUBFwb
2   6   Te JMejSaK
3   8   dDGMMiuRuh
4   10  phALAbnq c
5   11  EQQwPKksIj
6   12  PAt tbDnf
7   13  f zUSuhvM
8   14  TIMBgAGhkT
9   15  OOcnjKLLER

IDで位置を取得するには:

SELECT * FROM my_view2 WHERE _id=11

結果:

row_id | _id | field

5   11  EQQwPKksIj

お役に立てば幸いです

于 2011-02-18T11:30:09.913 に答える
-2

正しい方法で行うことができるのに、なぜ難しい方法で行うのですか?

私はマニュアルを参照します:

http://d.android.com/reference/android/widget/AdapterView.OnItemSelectedListener.html#onItemSelected%28android.widget.AdapterView%3C?%3E,%20android.view.View,%20int,%20long%29

コード例:

spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
        {
            int index = spinner.getSelectedItemPosition();
            Toast.makeText(getBaseContext(), 
                "You have selected item : " + index + " which is row " + id, 
                Toast.LENGTH_SHORT).show();                
        }
        public void onNothingSelected(AdapterView<?> arg0) {}
    });

この啓蒙について #android-dev の evancharlton に感謝します。:)

于 2010-06-10T20:05:12.790 に答える