2013-01-15 45 views
8

tôi có dữ liệu tải spinner đến sqlitetải từ sqlite spinner với văn bản và giá trị

tôi có id trường và tên trường trong cơ sở dữ liệu.

private void loadSpinnerDataHama() { 
     // database handler 
     DatabaseSpinner db = new DatabaseSpinner(getApplicationContext()); 
     // Spinner Drop down elements 
     List<String> lables = db.getAllLabels(); 
     // Creating adapter for spinner 
     ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, 
     android.R.layout.simple_spinner_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 
     spin2.setAdapter(dataAdapter); 
    } 

    public List<String> getAllLabels(){ 
    List<String> labels = new ArrayList<String>(); 
    // Select All Query 
    String selectQuery = "SELECT * FROM " + TABLE_LABELS; 

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

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

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

    // returning lables 
    return labels; 
} 

và kết quả là

USA -> giá trị là "USA"

Pháp -> giá trị là "Pháp"

khi tôi thay đổi mã labels.add(cursor.getString(1));-labels.add(cursor.getString(0));

và kết quả là

1 -> val ue là "1"

2 -> giá trị là "2"

tôi cố gắng với int position2 = spin2.getSelectedItemPosition()+1; nhưng giá trị là id/vị trí của spinner, không phải là id của cơ sở dữ liệu.

cách hiển thị tên trường trên spinner. nhưng giá trị là id của tên

Ví dụ: spinner display:

USA -> giá trị là "1"

Pháp -> giá trị là "2"

BR

Alex

Trả lời

24

Thực sự đơn giản, những gì bạn có thể làm là triển khai/thể hiện những gì bạn cần theo lớp, theo cách sau:

Tạo lớp sau: SpinnerObject

public class SpinnerObject { 

    private int databaseId; 
    private String databaseValue; 

    public SpinnerObject (int databaseId , String databaseValue) { 
     this.databaseId = databaseId; 
     this.databaseValue = databaseValue; 
    } 

    public int getId() { 
     return databaseId; 
    } 

    public String getValue() { 
     return databaseValue; 
    } 

    @Override 
    public String toString() { 
     return databaseValue; 
    } 

} 

Sử dụng lớp này, bạn vẫn có thể sử dụng việc thực hiện Android của ArrayAdapter (không cần phải thực hiện riêng của bạn, kể từ khi toString phương pháp cung cấp giá trị chuỗi mà bạn muốn hiển thị và bạn vẫn lưu trữ id cơ sở dữ liệu mà bạn cũng cần).

Bây giờ bạn sẽ phải tạo danh sách của bạn như sau:

public List < SpinnerObject> getAllLabels(){ 
    List <SpinnerObject> labels = new ArrayList <SpinnerObject>(); 
    // Select All Query 
    String selectQuery = "SELECT * FROM " + TABLE_LABELS; 

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

    // looping through all rows and adding to list 
    if (cursor.moveToFirst()) { 
     do { 
      labels.add (new SpinnerObject (cursor.getString(0) , cursor.getString(1))); 
     } while (cursor.moveToNext()); 
    } 

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

    // returning labels 
    return labels; 
} 

Bây giờ bạn có danh sách các đối tượng với các giá trị và id, bạn tải các spinner theo cách này:

private void loadSpinnerDataHama() { 
    // database handler 
    DatabaseSpinner db = new DatabaseSpinner(getApplicationContext()); 
    // Spinner Drop down elements 
    List <SpinnerObject> lables = db.getAllLabels(); 
    // Creating adapter for spinner 
    ArrayAdapter<SpinnerObject> dataAdapter = new ArrayAdapter<SpinnerObject>(this, 
    android.R.layout.simple_spinner_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 
    spin2.setAdapter(dataAdapter); 
} 

Và spinner sẽ hiển thị các giá trị, trong khi có id của chúng (từ cơ sở dữ liệu) quá.

Để lấy id của item đang được chọn, bạn làm như sau:

int databaseId = Integer.parseInt (((SpinnerObject) spin2.getSelectedItem()).getId()); 

Hãy thử nó và cho tôi biết những gì xảy ra.

+0

cùng một thuật toán khi tôi thấy [http: // stackoverflow này.com/questions/5424841/whats-the-correct-way-to-triển khai-key-value-pair-in-spinner-in-android]. tôi thử với hai phương thức, với mã của bạn và với 'SimpleCursorAdapter' và nó hoạt động. cảm ơn sự giúp đỡ của bạn @Leeeeeeelo –

+2

Bài đăng hay! Câu lệnh 'cursor.getString (0)' có thể là 'cursor.getInt (0)' mặc dù. – dana

+0

Xin chào các bạn, tôi mới làm quen với Android, và thực sự có yêu cầu tương tự và thử giải pháp mà bạn đề xuất, nhưng không thể vượt qua nó. Bạn có thể xin vui lòng gửi một dự án ví dụ làm việc cho việc này. Vui lòng – sjpatel

Các vấn đề liên quan