2010-01-16 7 views
5

Je reçois le texte '[email protected]' renvoyé par un appel à spinner.getSelectedItem(). ToString(). Je ne suis pas sûr pourquoi. Le spinner est lié à un SimpleCursorAdapter.[email protected]

Voici le code

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

et 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" /> 

Le xml ressemble spinner cette

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

et le curseur retourné est

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 fileuse semble fonctionner correctement. Lorsque j'essaie de sauvegarder c'est ce qui est passé comme la valeur de l'élément sélectionné en utilisant spinner.getSelectedItem(). ToString().

Tout le monde voit quelque chose de flagrant mal ici. Je ne sais pas quoi faire.

merci patrick

+0

Cela fonctionnait correctement avec un ArrayAdapter. La valeur transmise était alors le texte de la catégorie (Business ou Personal). Le fait que j'utilise un SimpleCursorAdapter change-t-il la façon dont la valeur est passée? – bugzy

Répondre

6

Votre code fonctionne comme vous l'avez écrit. Spinner est un AdapterView. L'adaptateur auquel vous l'avez connecté est un SimpleCursorAdapter. Cela signifie que l'élément sélectionné est un Cursor (positionné sur l'élément dans le jeu de résultats du curseur correspondant au choix de l'utilisateur). Cursor a l'implémentation par défaut de toString(), ce qui renvoie quelque chose comme [email protected].

Puisque vous ne nous avez pas dit ce que vous essayez de faire, il est impossible de vous conseiller avec précision. Quoi que vous voulez économiser, cependant, doit être retiré de la Cursor vous obtenez de getSelectedItem().

+0

Merci commonsware, je pense que vous avez peut-être répondu à ma question. J'essaie simplement de prendre la valeur de l'élément sélectionné et de l'enregistrer dans une table de base de données. Initialement, j'utilisais un ArrayAdapter pour remplir le spinner. Le tableau était un tableau d'éléments unique avec quelques catégories ("Business", "Personnel"). Cela a fonctionné comme une chaîne a été adoptée. Donc, vous dites que je vais devoir faire un peu de codage supplémentaire pour localiser le nom de catégorie réel à partir du curseur basé sur le passé spinner.getSelectedItemPosition()? merci patrick – bugzy

+0

Oui. Étant donné votre 'query()', vous devrez appeler 'getString (1)' sur le 'Cursor', pour récupérer la 2ème colonne ... en supposant que' KEY_CATEGORIES_NAME' est la valeur que vous recherchez. – CommonsWare

1

Je peux être ennuyé en lisant votre contexte, mais je voulais juste aider brièvement. J'ai une colonne nommée après DbHelper.KEY_COL, et je récupère une valeur DbHelper.KEY_COL à une ligne spécifique. peut-être une partie de mon code aiderait:

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