2016-04-13 4 views
0

Ich habe einen Spinner, den ich mit Kindernamen aus einer SQLite-Datenbank füllen muss. Ich habe eine Methode, um eine Liste von Kindern zurückzugeben.So listen Sie die Texteigenschaft eines Listenelements in einem Spinner auf

public List<ChildUser> getChildren() { 
     List<ChildUser> childList = new ArrayList<ChildUser>(); 

     //select columns 
     String[] tableColumns = new String[]{"id", "childname", "nickname"}; 

     Cursor cursor = db.query("child", tableColumns, "parent =? ", new String[]{_parentName}, null, null, null); 
     cursor.moveToFirst(); 

     while (!cursor.isAfterLast()) { 
      ChildUser child = new ChildUser(); 
      //take values from database 
      child.setId(cursor.getInt(0)); 
      child.setChildName(cursor.getString(1)); 
      child.setNickName(cursor.getString(2)); 


      //add to db 
      childList.add(child); 

      cursor.moveToNext(); 
     } 
     return childList; 
    } 

ich dann rufen Sie diese Methode von einem Fragment einer Schleuder zu füllen, aber ich bin eine andere Eigenschaft des childlist bekommen dispayed, wie kann ich in der Schleuder die Eigenschaft text meines ausgewählten Elements angezeigt werden? (Bitte klicken Sie auf den Link, um zu sehen genau das, was meine Spinner Displays)

final ChildDataBase cdb = new ChildDataBase(getActivity()); 

     final List<ChildUser> childList = cdb.getChildren(); 



     Spinner spinner = (Spinner) v.findViewById(R.id.del_child_spinner); 
     ArrayAdapter<ChildUser> spinnerAdapter = new ArrayAdapter<ChildUser>(getActivity(), android.R.layout.simple_spinner_item, childList); 
     spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinner.setAdapter(spinnerAdapter); 
     spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 

       childId = childList.get(position).getId(); 

       Toast succ = Toast.makeText(Home.super.getContext(), childList.get(position).getChildName() + " Selected.", Toast.LENGTH_SHORT); 
       succ.show(); 


       return; 
      } 

      @Override 
      public void onNothingSelected(AdapterView<?> parent) { 
       Toast succ = Toast.makeText(Home.super.getContext(), "No child selected.", Toast.LENGTH_SHORT); 
       succ.show(); 
      } 
     }); 

Spinner < --- hier klicken Spinner

Ich habe auch eine benutzerdefinierte Liste-Adapter, im nicht sicher, ob ich es anwenden können irgendwie, um diese Aufgabe zu erledigen.

/** 
* Created by Victor on 4/3/2016. 
*/ 
public class ChildListAdapter extends ArrayAdapter<ChildUser> { 

    private FragmentTransaction fragmentTransaction; 
    private android.support.v4.app.FragmentManager fragmentManager; 
    private final Context context; 

    private final List<ChildUser> childList; 

    public ChildListAdapter(Context context, List<ChildUser> childList){ 
     super(context, R.layout.fragment_child_list_layout, childList);//fragment_child_list 
     this.context = context; 
     this.childList= childList; 
    } 
    @Override 
    public View getView(final int position, View convertView, ViewGroup parent){ 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     View rowView = inflater.inflate(R.layout.fragment_child_list_layout,parent,false); 


     Button childName = (Button)rowView.findViewById(R.id.childButton); 
     childName.setText(childList.get(position).getNickName()); 

     childName.setOnClickListener(new View.OnClickListener() { 


      public void onClick(View v) { 
       String selectedChild = childList.get(position).getChildName(); 
       // do something with selected item 
       Toast fail = Toast.makeText(ChildListAdapter.super.getContext(), selectedChild + " selected", Toast.LENGTH_SHORT); 
       fail.show(); 
       Globals._selectChild = selectedChild; 
       TaskList taskList = new TaskList(); 
       fragmentTransaction = ((FragmentActivity)context).getSupportFragmentManager().beginTransaction(); 
       fragmentTransaction.replace(R.id.fragholder, taskList); 
       fragmentTransaction.commit(); 

      } 
     }); 


     return rowView; 


    } 




} 

Das ist mein ChildUser Objekt

public class ChildUser { 
    String childName; 
    String nickName, gender, parent; 
    int id, age; 

    public void setChildName(String childName) 
    { 
     this.childName = childName; 
    } 
    public String getChildName() 
    { 
     return this.childName; 
    } 
    public void setNickName(String nickName) 
    { 
     this.nickName = nickName; 
    } 
    public String getNickName() 
    { 
     return this.nickName; 
    } 
    public void setGender(String gender) 
    { 
     this.gender = gender; 
    } 
    public String getGender() 
    { 
     return this.gender; 
    } 
    public void setParent(String parent) 
    { 
     this.parent = parent; 
    } 
    public String getParent() 
    { 
     return this.parent; 
    } 
    public void setId(int id) 
    { 
     this.id = id; 
    } 
    public int getId() 
    { 
     return this.id; 
    } 
    public void setAge(int age) 
    { 
     this.age = age; 
    } 
    public int getAge() 
    { 
     return this.age; 
    } 
} 
+0

Ich denke, das passiert, weil Sie 'Super' in Ihrem Konstruktor aufrufen, kommentieren und sehen, ob es – yennsarah

+0

in meinem childlistadapter hilft? Wenn ich es auskommen bekomme ich viele Fehler – vhdz04

+0

möchten Sie die Daten, die in sqlite gespeichert ist in Spinner –

Antwort

1

Sie die Zeichenfolge Druck durch die Methode toString() der Klasse zurückgegeben.

Sie können toString() überschreiben und den korrekten Wert zurückgeben, andernfalls müssen Sie einen eigenen benutzerdefinierten Adapter implementieren oder ein Zeichenfolgenarray mit der richtigen Eigenschaft erstellen, anstatt die Modellliste an das ArrayAdapter zu übergeben.

Die einfachste ist toString()

public class ChildUser { 
    String childName; 
    String nickName, gender, parent; 
    int id, age; 

    @Override 
    public String toString() 
    { 
     return this.childName; 
    } 
/*.......*/ 
} 

hoffe, das hilft außer Kraft zu setzen.

+0

Ich kann nicht glauben, dass es so einfach war! Ich danke dir sehr. Ich wünschte, ich könnte deine Antwort verbessern, aber ich bin noch nicht da: / – vhdz04

Verwandte Themen