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显示的是arraylist编号,而不是主键

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

我发现很难找到解决方案。我该怎么办?请帮帮我

我也试试这个方法,但是值是光标。在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

简单..您几乎可以回答。改变你getAllLabels的方式如下。

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 {
        Criteria ct = new Criteria();
        ct.setLabel(cursor.getString(1));
        ct.setKey(Integer.parseInt(c.getString(0)));
        labels.add(ct);
    } while (cursor.moveToNext());
}

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

// returning lables
return labels;
}

在这里,我只更改了 do while 循环。以这种方式为标签和键创建 getter 和 setter。要获取主键,请使用选定的 Criteria 对象,例如ct.getKey;我希望这能帮到您。

更新

List<String> field_key; //accessible in whole class.
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());
List<String> field_lables = new ArrayList<String>();
field_key = new ArrayList<String>();

// Creating adapter for spinner
for (Criteria ct : lables) {
    field_lables.add(ct.getLabel);
    field_key.add(ct.getkey);
}

ArrayAdapter<String> dataAdapter = new ArrayAdapter<String> (this,
android.R.layout.simple_spinner_dropdown_item, field_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();
    String key = field_key.get(position).toString();


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

试试这种方式,让我知道会发生什么

于 2013-11-05T09:54:53.477 回答
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 回答