2

Ich mache ein Projekt für die Universität, ich habe ein DialogFragment, wo ich ein neues Tier für eine Datenbank aufnehme. Im Formular befindet sich ein Spinner, der aus einer Datenbank geladen wird. Dies ist die „onCreate“ Code of DialogFragment:Warum ist mein Spinner leer?

public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setHasOptionsMenu(true); 

    LayoutInflater inflater = getActivity().getLayoutInflater(); 
    View v = inflater.inflate(R.layout.dialog_add_animal, null); 
    Spinner spEspecies = (Spinner) v.findViewById(R.id.spinner); 


    Cursor c = getActivity().getContentResolver().query(ContratoBBDD.Especies.URI_CONTENIDO,null,null,null,null); 
    SimpleCursorAdapter adaptador = 
      new SimpleCursorAdapter(getActivity().getApplicationContext() ,android.R.layout.simple_spinner_item,c, 
        new String[]{ContratoBBDD.Especies._id}, 
        new int [] {android.R.id.text1},SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER ); 

    Log.d("Tam", c.getCount() + ""); 
    Log.d("Col", c.getColumnCount() + ""); 
    adaptador.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

    spEspecies.setAdapter(adaptador); 

    ActionBar actionBar = ((AppCompatActivity) getActivity()) 
      .getSupportActionBar(); 
    actionBar.setDisplayHomeAsUpEnabled(false); 
    actionBar.setDefaultDisplayHomeAsUpEnabled(false); 

} 

ich im Protokoll und Debuggen sehen kann, dass die Cursor-Information hat, wie die Spinner tut - aber wenn ich im Spinner klicken, es ist leer. Wo verliere ich die Informationen?

+1

Nicht sicher, ob es richtig ist, den Spinner-Adapter als 'SimpleCursorAdapter' festzulegen. Versuchen Sie, die Daten zuerst zu holen, indem Sie sie in ein Array einfügen, ein 'ArrayAdapter' erstellen und es als' SpinnerAdapter' festlegen. Es ist sehr wahrscheinlich, dass der Spinner-Adapter unmittelbar vor dem Abrufen der Daten gesetzt wird. – CaptJak

Antwort

0

können Sie den Link sehen

Putting cursor data into an array

//the constructor 
    Spinner spEspecies = (Spinner) v.findViewById(R.id.spinner); 
    //set the value to show 
    //change this line with query, better use ArrayList<String> 
String Especies[] = {"Homo Sapiens","Felis Domestica","Zea mays"}; 
    //insert to spinner 
    ArrayAdapter<String> aaspEspecies = new ArrayAdapter<String>(this, 
      android.R.layout.simple_spinner_item, Especies); 
    // The drop down view 
    aaspEspecies.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spEspecies.setAdapter(aaspEspecies); 
0

Vielen Dank tor die Antworten. Ich habe die Änderungen vorgenommen, die Sie mir in den anderen Posts gesagt haben, und ich habe gehört, dass der Spinner die Array-Daten lädt. Ich hatte diesen Code verwendet:

Cursor c = getActivity().getContentResolver().query(ContratoBBDD.Especies.URI_CONTENIDO,null,null,null,null); 

    ArrayList<String> especies = new ArrayList<String>(); 
    c.moveToFirst(); 
    while(!c.isAfterLast()) { 
     especies.add(c.getString(c.getColumnIndex("descripcion"))); 
     c.moveToNext(); 
    } 
    c.close(); 

    ArrayAdapter<String> aaspEspecies = new ArrayAdapter<String>(getActivity().getApplicationContext(), android.R.layout.simple_spinner_item,especies); 
    // The drop down view 
    aaspEspecies.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spEspecies.setAdapter(aaspEspecies); 

Wenn ich die App debuggen, ist der Spinner Ok, aber wenn ich darauf klicke, werden Daten nicht angezeigt.