Why not set the value of Spinner Android. i use Cursor?

185 Views Asked by At

I have a table in the database called PrimaryData Which includes fields are PrimaryDataId and PrimaryDataCode .My problem is,When the cursor returns data from database ,Spinner does not set the values of the cursor.

xml spinner file

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="10dp"
    android:textSize="14sp"
    android:textColor= "#000000"
    android:spinnerMode="dialog" />

PrimaryData class in which to put PrimaryDataId and PrimaryDataCode. This class is the equivalent of a database table.

package com.example.proposaldashborad;

public class PrimeryData {
    private int primeryDataId;
    private String primeryDataCode;


    @Override
    public String toString() {
        return this.primeryDataCode; // What to display in the Spinner list.
    }

    public int getPrimaryDataId() {
        return primeryDataId;
    }

    public void setPrimaryDataId(int value) {
        this.primeryDataId = value;
    }

    public int getPrimaryDataCode() {
        return primeryDataId;
    }

    public void setPrimaryDataCode(String value) {
        this.primeryDataCode = value;
    }
}

this code fill Spinner

private void GetPrimaryDataForSpinner(String primaryDataName, Cursor cr) {   
    cr.moveToFirst();
    //array_spinner = new String[cr.getCount()];
    ArrayList<PrimeryData> pds =  new ArrayList<PrimeryData>() ;

    do {
        //array_spinner[i] = cr.getString(cr.getColumnIndex("PrimeryDataCode"));

        PrimeryData pd = new PrimeryData() ;
        pd.setPrimaryDataId(cr.getInt(cr.getColumnIndex("PrimeryDataId")));
        pd.setPrimaryDataCode(cr.getString(cr.getColumnIndex("PrimeryDataCode")));
        pds.add(pd) ;   

    } while (cr.moveToNext());

    cr.close();

    if (primaryDataName == "Admin") {
        adapterAdmin = new ArrayAdapter<PrimeryData>(this,R.layout.spinner, pds);
        sAdmin = (Spinner) findViewById(R.id.spinnerAdmin);
        sAdmin.setAdapter(adapterAdmin);        
    }
}

And this is my code when data is returned from the database.

 private Spinner sAdmin;
    private ArrayAdapter<PrimeryData> adapterAdmin;
    db = new DBAdapter(getApplicationContext());
    db.open();
    cr = db.getViewMT26(entityID);
    cr.moveToFirst();

    if(cr.getCount()>0) {
                PrimeryData pd = new PrimeryData();
                pd.setPrimaryDataId(cr.getInt(cr.getColumnIndex("AdminId")));
                   pd.setPrimaryDataCode(cr.getString(cr.getColumnIndex("Admin")));
                   sAdmin.setSelection(adapterAdmin.getPosition(pd));
           }
    cr.close();
    db.close();

My main question is why

adapterAdmin.getPosition (pd));

Returns -1?

2

There are 2 best solutions below

0
On

You have to initialize your adapterAdmin, and set this to your spinner by setAdapter method. Furthermore, if you only using a list of PrimeryData, then the text which is displayed on each spinner item will be PrimeryData (instance) toString().

3
On

Follow this code to set value in Spinner

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;

public class MainActivity extends Activity implements OnItemSelectedListener {
 Spinner spinnerOsversions;
 TextView selVersion;
 private String[] state = { "Cupcake", "Donut", "Eclair", "Froyo",
   "Gingerbread", "HoneyComb", "IceCream Sandwich", "Jellybean",
   "kitkat" };

  @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  System.out.println(state.length);
  selVersion = (TextView) findViewById(R.id.selVersion);
  spinnerOsversions = (Spinner) findViewById(R.id.osversions);
  ArrayAdapter<String> adapter_state = new ArrayAdapter<String>(this,
    android.R.layout.simple_spinner_item, state);
  adapter_state
    .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  spinnerOsversions.setAdapter(adapter_state);
  spinnerOsversions.setOnItemSelectedListener(this);

  }

  public void onItemSelected(AdapterView<?> parent, View view, int position,
   long id) {
  spinnerOsversions.setSelection(position);
  String selState = (String) spinnerOsversions.getSelectedItem();
  selVersion.setText("Selected Android OS:" + selState);
 }

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

  }

}