2016-06-29 15 views
4

Ich habe einen Spinner, der unter Verwendung von Code unter Verwendung des Spinner ausgewählt wird. Was ist der beste Weg dafür?So erhalten Sie ausgewählte Artikelposition von Spinner mit SimpleAdapter

List<Map<String, String>> tablelist = new ArrayList<>(); 
    SQLiteDatabase db = openOrCreateDatabase("database", MODE_PRIVATE, null); 
    String query = "select * from table"; 
    Cursor ps = db.rawQuery(query, null); 
    while (ps.moveToNext()){ 
     Map<String, String> datanum = new HashMap<>(); 
     datanum.put("Id", ps.getString(ps.getColumnIndex("Id"))); 
     datanum.put("Some", ps.getString(ps.getColumnIndex("Some"))); 
     tablelist.add(datanum); 
    } 
    db.close(); 
    ps.close(); 
    SimpleAdapter spinnerAdapter = new SimpleAdapter(this, tablelist, R.layout.row_spinner, new String[] {"Id", "Some"}, new int[] {android.R.id.text1, android.R.id.text1}); 
    spinnerAdapter.notifyDataSetChanged(); 
    spinnerAdapter.setDropDownViewResource(R.layout.row_spinner_list); 
    spinner.setAdapter(spinnerAdapter); 

Antwort

0

werde ich auf die Frage zu beantworten: „besten Weg, um die Position des Elements erhalten ich für setSelection require() Methode“ Ich hoffe, es ist, was Sie fragen.

Ich ändere SimpleAdapter mit ArrayAdapter.

Ich bevorzuge ein Objekt für jedes Ergebnis für Ihre DTB-Anfrage erstellen und das Objekt in den Spinner zuordnen. So können Sie leicht auf jedes Ergebnis zugreifen.

wie folgt aus:

public class test { 
    private String TAG = "test"; 

    private Activity curAct; 
    private Spinner spinner; 
    private SpnObj[] spinnerOptions; 

    public test(Activity curAct) { 
     this.curAct = curAct; 
    } 

    public void test() { 
     this.spinner = new Spinner(this.curAct); 
     this.spinnerOptions = this.getSpnContent(); 

     final ArrayAdapter spinnerAdapter = new ArrayAdapter<>(this.curAct, android.R.layout.simple_spinner_item, spinnerOptions); 
     spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     this.spinner.setAdapter(spinnerAdapter); 

     // setSelection with item id = 1 
     this.preSelectItem(1); 

     // setSelection with item some = 'some' 
     this.preSelectItem("some"); 

     // get selectedItem 
     SpnObj selectedItem = this.getSelectedItem(); 

     Log.d(TAG, "the current selected item id is : " + selectedItem.id); 
     Log.d(TAG, "the current selected item some is : " + selectedItem.some); 
    } 

    // this method should be used when you need to access on you're selectedItem 
    public SpnObj getSelectedItem() { 
     return (SpnObj) this.spinner.getSelectedItem(); 
    } 

    // this method should be used for set the selection on a item with the id => maybe that was what you're asking for 
    public void preSelectItem(int id) { 
     boolean doWeStopTheLoop = false; 

     for (int i = 0; i < this.spinnerOptions.length && !doWeStopTheLoop; i++) { 
      if (((SpnObj) this.spinner.getItemAtPosition(i)).id == id) { 
       this.spinner.setSelection(i); 
       doWeStopTheLoop = true; //you can use break; too 
      } 
     } 
    } 

    // this method should be used for set the selection on a item with the id => maybe that was what you're asking for 
    // surcharge for 'some' column 
    public void preSelectItem(String some) { 
     boolean doWeStopTheLoop = false; 

     for (int i = 0; i < this.spinnerOptions.length && !doWeStopTheLoop; i++) { 
      if (((SpnObj) this.spinner.getItemAtPosition(i)).some.equals(some)) { 
       this.spinner.setSelection(i); 
       doWeStopTheLoop = true; //you can use break; too 
      } 
     } 
    } 

    private SpnObj[] getSpnContent() {  // this method must be call in a thread 
     SQLiteDatabase db = this.curAct.openOrCreateDatabase("database", 0, null); 
     String query = "select * from table"; 
     Cursor ps = db.rawQuery(query, null); 

     SpnObj[] spnContent = new SpnObj[ps.getColumnCount()]; 

     if (ps.getColumnCount() > 0) { 
      int iterator = 0; 
      while (ps.moveToNext()) { 
       spnContent[iterator] = new SpnObj(
         ps.getInt(ps.getColumnIndex("Id")), 
         ps.getString(ps.getColumnIndex("Some")) 
       ); 

       iterator++; 
      } 
     } else { 
      // no rows : insert code here if you want manage this 
     } 

     db.close(); 
     ps.close(); 

     return spnContent; 
    } 
} 

// this object is only encapsulate the DTB result in a java class, so we can work easily with 
class SpnObj { 
    public int id; 
    public String some; 

    public SpnObj(int id, String some) { 
     this.id = id; 
     this.some = some; 
    } 

    @Override 
    public String toString() {   // important ! this method will be used for display the value in the dropdown list from the spinner 
     return this.some; 
    } 
} 
0

prüfen unten Code für Ihre Antwort, können Sie Position sowie ausgewählte Element von unten Code.

SimpleAdapter spinnerAdapter = new SimpleAdapter(this, tablelist, R.layout.row_spinner, new String[] {"Id", "Some"}, new int[] {android.R.id.text1, android.R.id.text1}); 
    spinnerAdapter.notifyDataSetChanged(); 
    spinnerAdapter.setDropDownViewResource(R.layout.row_spinner_list); 
    spinner.setAdapter(spinnerAdapter); 

    spinner.setOnItemSelectedListener(new OnItemSelectedListener() 
    { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View v,int position, long id) 
     { 
      //Here position is selected item position 
      Map<String, String> datanum = tablelist.get(position); 
      // now you can use this datanum for further use 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> parent) { 
      // TODO Auto-generated method stub 

     } 
    });