0

Spinner で選択したアイテムの主キーを表示しようとしています。TextView で主キーを表示したいのですが、どうすればよいですか?データベースのテーブルにフィールドを表示する方法は既に知っています。

私のDatabseHandler.javaでは、これがテーブル基準にデータを挿入する方法です

public long insertLabelCriteria(String label, String label2, String label3){
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_CRI_NAME, label);
    values.put(KEY_CRI_PER, label2); 
    values.put(KEY_CRI_EVPK, label3);
    // Inserting Row

    long id = db.insert(TABLE_CRITERIA, null, values);
    db.close(); // Closing database connection

    return id;



}

これは、ラベルを取得してラベルのリストを返す私の方法です

public List<Criteria> getAllLabels( String evpk ){
    List<Criteria> labels = new ArrayList<Criteria>();

    SQLiteDatabase db = this.getReadableDatabase();

   String selectQuery = "SELECT  * FROM " + TABLE_CRITERIA + " WHERE "
         + KEY_CRI_EVPK + " = " + evpk ;



    Cursor cursor = db.rawQuery(selectQuery, null);

    // looping through all rows and adding to list
    if (cursor.moveToFirst()) {
        do {
            labels.add(new Criteria(cursor.getString(1)));


        } while (cursor.moveToNext());
    }

    // closing connection
    cursor.close();
    db.close();

    // returning lables
    return labels;

}

私の MainActivity で

メソッド loadSpinnerData があり、基準を追加するたびにこのメソッドを使用します。Spinner をロードして、データベースに追加したアイテムを表示します。

private void loadSpinnerData() {
    // TODO Auto-generated method stub
    // database handler
    DatabaseHandler db = new DatabaseHandler(getApplicationContext());

    // Spinner Drop down elements
    List<Criteria> lables = db.getAllLabels(evpk.getText().toString());

    // Creating adapter for spinner

    ArrayAdapter<Criteria> dataAdapter = new ArrayAdapter<Criteria> (this,
    android.R.layout.simple_spinner_dropdown_item, lables);

    // Drop down layout style - list view with radio button
    dataAdapter
            .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    // attaching data adapter to spinner
    criteria_spin.setAdapter(dataAdapter);
    criteria_spin.setOnItemSelectedListener(this);
}

さて、アイテムを選択すると、選択したアイテムの主キーをスピナーに表示するにはどうすればよいですか? 以下のこのコードは、アイテムのクリックを表示して選択するためのものです。

  @Override
   public void onItemSelected(AdapterView<?> parent, View view, int position,
            long id) {
        // On selecting a spinner item
        String label = parent.getItemAtPosition(position).toString();


        // Showing selected spinner item
        Toast.makeText(parent.getContext(), "You selected: " + label,
            Toast.LENGTH_LONG).show();


}

私もこのコードを追加しようとしましたが、ID表示は主キーではなく配列リスト番号です

 long rowId = id;
 String criteriapk = String.valueOf(label);
 cripk.setText(criteriapk);

これで解決策を見つけるのは難しいと思います。どうすればいいですか?助けてください。

この方法も試してみたのですが、値がcursor.inのTextViewで、数字が表示されません。

public Cursor find_id_of_criteria(String label){


SQLiteDatabase db=this.getWritableDatabase(); 
String selectQuery = "SELECT criteria_id FROM Criteria WHERE criteria_name = "+"'" + label +"'";
Cursor id = db.rawQuery(selectQuery, null);


db.close(); 
return  id;

}

そしてloadSpinnerdataにこれを入れました

//display id of criteria
        Cursor id2 =      db.find_id_of_criteria(label);
        String cri =(String.valueOf(id2).toString());
        cripk.setText(cri);     
4

2 に答える 2

0

BaseAdapter または CursorAdapter クラスを拡張する独自のアダプターを実装し、ArrayAdapter の代わりに使用する必要があります。

CursorAdapter を使用した例を次に示します。独自の実装の開始を意図しているため、テストしていません。もちろん、このコードに若干の変更を加えれば、他のレイアウトも使用できます。

public class CriteriaCursorAdapter extends CursorAdapter {
    private class Holder {
        TextView text;
    }

    private LayoutInflater mInflater;
    public CriteriaCursorAdapter(Context context, Cursor c) {
        super(context, c);
        mInflater = LayoutInflater.from(context);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = mInflater.inflate(
                  android.R.layout.simple_spinner_dropdown_item, parent, false);
        }
        Holder holder = (Holder)convertView.getTag();
        if (holder == null) {
            holder = new Holder();
            holder.text = (TextView)convertView.findViewById(android.R.id.text1);
            convertView.setTag(holder);
        }
        Cursor c = (Cursor)getItem(position);
        holder.text.setText(c.getString(1));
        return convertView;
    }
}

重要: CursorAdapter を使用する場合、カーソルには「_id」という名前の列が必要です。TABLE にこの列が含まれていない場合は、SELECT ステートメントを変更することでこれを実現できます。

SELECT columnPK _id, col1, .... FROM ...

主キー (カーソルの列 '_id') を取得するlong getItemId(int position);には、CriteriaCursorAdapter を使用できます。

BaseAdapter または CursorAdapter を拡張するための多くの例があります。一例

于 2013-11-05T07:38:44.057 に答える