2013-11-05 39 views
0

我想顯示在Spinner中選擇的項目的主鍵。我想在TextView中顯示主鍵。我將如何執行此操作?我已經知道如何在數據庫的表中顯示一個字段。在Spinner中選擇項目時在SQlite數據庫中顯示主鍵

在我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

我有一個方法loadS pinnerData和我用這個evrytime我添加一個標準,它會加載微調,以查看我在數據庫中添加現在

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(); 


} 

我也嘗試添加該代碼,但編號顯示爲ArrayList的數量,而不是主鍵

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

我覺得很難,在this.What將我找到的解決方案?幫我一下

我也試過這個方法,但是在TextView中的值是cursor.in,它不顯示數字。

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);  
+0

用簡單的方式是查詢數據庫與所選項目的值(假設它是唯一併總是返回1項)並獲得主鍵。最好的方法是實現您的自定義適配器,就像AlexS回答的那樣。 –

+0

我在上面添加了新的代碼,我希望你能幫助我。他們無論如何將光標轉換爲長或字符串? –

+0

如果你這樣做,然後把你的代碼片段'/ /標準'顯示在'onItemSelected()'內。然後使用'long id = id2.getLong(0);'得到id。用數字小心'setText()',因爲它會引用String資源。 –

回答

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」),你可以用你的CriteriaCursorAdapter的long getItemId(int position);

你會發現很多擴展BaseAdapter或CursorAdapter的例子。 One Example

+0

你會幫我嗎?我是這個新手 –

+0

我稍後會發布更詳細的信息,因爲在智能手機上編寫代碼並不好笑。 – AlexS

+0

我在上面添加新的代碼,是否有幫助?我現在的問題是,它不顯示主鍵,我認爲它是主鍵相當於cursor.is他們無論如何使它長或字符串? –

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。要獲得主鍵,請使用選定的條件對象,如ct.getKey;我希望這能幫到您。

UPDATE

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

試試這個辦法,讓我知道發生了什麼

+0

我在哪裏放ct.getKey?我應該在OnItemSelected中放什麼?幫幫我一下 –

相關問題