0

in meiner Haupttätigkeit gibt es tow Texte bearbeiten einen für den Namen des Studenten und einen für Studenten College, auch gibt es einen Schüler hinzufügen Button, wie der folgende Code die onClick-Funktion für den Schüler hinzufügen Taste werden die Werte der Bearbeitungs Texte zu einer Listenansicht einzufügen:Anpassung Array-Adapter zum Hinzufügen von Edittext-Werte zu ListView

public class Students extends AppCompatActivity { 

//Initializing ... 
EditText NameEditText; 
EditText CollegeEditText; 
Button AddButton; 
ListView StudentListView; 
ArrayList<Student> list; 
ArrayAdapter<Student> adapter; 
Random rand = new Random(); 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_students); 

// Erste Referenzen ...

AddButton=(Button) findViewById(R.id.AddBtn); 
NameEditText=(EditText) findViewById(R.id.StudentName); 
CollegeEditText=(EditText) findViewById(R.id.College); 
StudentListView=(ListView) findViewById(R.id.StudentListView); 

//define the array list of students . 
list=new ArrayList<Student>(); 

//set the communication between the ArrayList and the adapter. 



adapter=new ArrayAdapter<Student>(this,android.R.layout.simple_list_item_1,list); 
//set the communication between the Adapter and the ListView. 



    StudentListView.setAdapter(adapter); 

OnClickListener listener=new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     int ID=rand.nextInt(50) + 1; 
     Student student=new Student(); 
     student.setID(ID); 
     student.setName(NameEditText.getText().toString()); 
     student.setCollege(CollegeEditText.getText().toString()); 

     list.add(student); 
     NameEditText.setText(""); 
     CollegeEditText.setText(""); 
     adapter.notifyDataSetChanged(); 
    } 
}; 
    AddButton.setOnClickListener(listener); 

}} 

Wie man sehen kann ich einen Studenten-Klasse und die Liste der Schüler erstellt haben und benutzte Array-Adapter, um die Werte zum ListView hinzuzufügen.

Was ich wirklich will, ist, um benutzerdefinierte meine Listview so jede Zeile der Listenansicht wie diese So

ListViewRow.xml

aussehen würde ich bin der Array Adapter Klasse Schüler Array Adapter wie dem folgenden Code Customizing :

class StudentAdapter extends ArrayAdapter <Student>{ 

public Context context; 
public List<Student>students; 




public StudentAdapter(@NonNull Context context, List<Student> list) { 
    super(context,R.layout.student_row, list); 
    this.context=context; 
    this.students=list; 

} 

@NonNull 
@Override 
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { 

    LayoutInflater inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View rowView = inflater.inflate(R.layout.student_row, parent, false); 
    TextView name = (TextView) rowView.findViewById(R.id.Name); 
    TextView college = (TextView) rowView.findViewById(R.id.College); 

// was als nächstes ???

} 

}

ich den Wert der einzelnen Textansicht in der Studenten Row gesetzt werden soll, wie kann ich meine Schüler Adapter vervollständigen?

+0

hoffe das hilft: https: // stackoverflow.com/questions/26800762/issue-in-einstellung-textviews-text-in-benutzerdefinierter-adapter-für-android –

Antwort

0

Ok, lass mich sehen, ob ich das richtig verstanden habe.

Sie haben eine Reihe von Studenten Dieses Array Sie den benutzerdefinierten Adapter als Liste übergeben wird Sie haben eine benutzerdefinierte XML-Layout für die Listitems (R.layout.student_row) in diesem Layout, müssen Sie Textviews (Name und Hochschule)

Nun, was Sie tun möchten, ist die Daten aus der Schülerliste in der Element der Listenansicht anzuzeigen. Dazu gehen Sie folgendermaßen vor:

@NonNull 
@Override 
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { 

    LayoutInflater inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View rowView = inflater.inflate(R.layout.student_row, parent, false); 
    TextView name = (TextView) rowView.findViewById(R.id.Name); 
    TextView college = (TextView) rowView.findViewById(R.id.College); 

    Student student = getItem(position); 

    name.setText(student.getname()); 
    college.setText(student.getCollege()); 

    return rowView; 

} 

Erläuterung:

Student Student = getItem (Position);

//You are passing a List of Students to the Custom Adapter 
public StudentAdapter(@NonNull Context context, List<Student> list) { 
    super(context,R.layout.student_row, list); 
    this.context=context; 
    this.students=list; 
} 

Der Adapter durchläuft alle Elemente in der Liste. Daher werden so viele Listenelemente vorhanden sein wie Elemente in der Schülerliste vorhanden sind.

Wenn Sie mit STRG + Klick auf den Array-Adapter (den Sie im benutzerdefinierten Adapter erweitern) gelangen Sie zur ArrayAdapter-Java-Klasse. Hier können Sie nach der Funktion getPosition() suchen.

/** 
    * Returns the position of the specified item in the array. 
    * 
    * @param item The item to retrieve the position of. 
    * 
    * @return The position of the specified item. 
    */ 
    public int getPosition(@Nullable T item) { 
     return mObjects.indexOf(item); 
    } 

Dies bedeutet, dass Sie den Schüler an der aktuellen Position der Schülerliste erhalten.

+0

ich habe den Punkt, aber könnten Sie erklären Student Student = getItem (Position); –

+0

Ich habe die Erklärung hinzugefügt, lassen Sie mich wissen, ob es genug ist oder wenn Sie mehr brauchen = D –

+0

das war sehr hilfreich ... vielen Dank. –

Verwandte Themen