2010-01-16 19 views
5

Me aparece el texto '[email protected]' devuelto por una llamada a spinner.getSelectedItem(). ToString(). No estoy seguro por qué. El spinner está vinculado a un SimpleCursorAdapter.[email protected]

Este es el código

cCategories = (Cursor) myAdapter.getAllCategories(); 
    this.startManagingCursor(cCategories); 

    SimpleCursorAdapter scaCategories = new SimpleCursorAdapter(this, R.layout.track_category_item,cCategories,new String[] {DBAdapter.KEY_CATEGORIES_NAME},new int[]{R.id.text1}); 
    scaCategories.setDropDownViewResource(R.layout.track_category_dropdown_item); 
    mCatSpinner = (Spinner) findViewById(R.id.thecategory); 
    mCatSpinner.setAdapter(scaCategories); 

    if(mCatSpinner.isSelected() != true) { 
     mCatSpinner.setSelection(0); 
    } 

y el xml track_category_item.xml

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/text1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@android:id/text1" 
    style="?android:attr/spinnerItemStyle" 
    android:ellipsize="marquee" 
    android:singleLine="true"> 
</TextView> 

track_category_dropdown_item.xml

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"   
    android:id="@+id/text1" 
    style="?android:attr/spinnerDropDownItemStyle" 
    android:singleLine="true" 
    android:layout_width="fill_parent" 
    android:layout_height="?android:attr/listPreferredItemHeight" 
    android:ellipsize="marquee" /> 

el XML spinner tiene este aspecto

<Spinner 
    android:id="@+id/thecategory" 
    android:prompt="@string/SELECT_CATEGORY" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_x="15px" 
    android:layout_y="133px" > 
</Spinner> 

y se devuelve el cursor es

public Cursor getAllCategories() 
{ 
    return db.query(DATABASE_CATEGORIES_TABLE, new String[] { 
      KEY_CATEGORIES_ROWID, 
      KEY_CATEGORIES_NAME, 
      KEY_CATEGORIES_DEFAULT}, 
      null, 
      null, 
      null, 
      null, 
      null); 
} 

La ruleta parece funcionar correctamente. Cuando trato de guardar esto, es lo que se pasa como el valor del elemento seleccionado utilizando spinner.getSelectedItem(). ToString().

Cualquiera ve algo incorrecto aquí. No estoy seguro de qué hacer.

gracias Patrick

+0

Esto funcionaba correctamente con un ArrayAdapter. El valor pasado entonces era el texto de la categoría (ya sea comercial o personal). ¿El hecho de que estoy usando un SimpleCursorAdapter cambia la forma en que se pasa el valor? – bugzy

Respuesta

6

Su código está funcionando como lo ha escrito. Spinner es un AdapterView. El adaptador al que lo conectó es un SimpleCursorAdapter. Esto significa que el elemento seleccionado es Cursor (ubicado en el elemento en el conjunto de resultados del Cursor correspondiente a la elección del usuario). Cursor tiene la implementación predeterminada de toString(), que devuelve algo así como [email protected].

Como no nos ha dicho lo que está tratando de hacer, es imposible asesorarlo con más precisión. Sin embargo, lo que sea que desee guardar, debe retirarse del Cursor que obtiene de getSelectedItem().

+0

Gracias commonsware, creo que es posible que haya respondido a mi pregunta. Simplemente intento tomar el valor del artículo seleccionado y guardarlo en una tabla de base de datos. Inicialmente estaba usando un ArrayAdapter para poblar el spinner. La matriz era una única matriz de elementos con un par de categorías ("Negocio", "Personal"). Esto funcionó cuando se pasó una secuencia. Por lo que dice que tendré que hacer una codificación adicional para ubicar el nombre de categoría real del cursor basado en el spinner.getSelectedItemPosition pasado()? gracias patrick – bugzy

+0

Sí. Dada tu 'query()', necesitarías llamar 'getString (1)' en 'Cursor', para recuperar la 2ª columna ... suponiendo que' KEY_CATEGORIES_NAME' es el valor que buscas. – CommonsWare

1

me molesta leer su contexto, pero solo quería ayudar brevemente. tengo una columna con el nombre después de DbHelper.KEY_COL, y estoy recuperando un valor de DbHelper.KEY_COL en una fila específica. tal vez algunos de mi código ayudaría:

Cursor colCur=(Cursor)spCols.getSelectedItem(); 
String col=colCur.getString(colCur.getColumnIndex(DbHelper.KEY_COL)); 
Cuestiones relacionadas