2016-06-22 16 views
2

Ich habe derzeit eine Fragment-Klasse, die String-Werte von einer anderen Klasse erhält. Ich muss diese Werte in eine Adapterklasse auffüllen und die Ansicht festlegen. Die Ansicht Klassendaten für Studenten Ankunftszeit und Schülernamen werden vom Server erhalten -Abrufen von String-Werten in die Adapterklasse für die Ansicht

Student arrival time  Student name  Present/Absent 
    10:50     John 
    10:55     Alex 
    11:00     Peter 
    11:07     Mark 

Ich bin die String-Werte in Fragmente Klasse immer für Anwesend/Abwesend und ich brauche in Gegenwart für Ansicht in Adapterklasse aktualisieren/Fehlende Spalte. Beachten Sie, dass die Ankunftszeit in aufsteigender Reihenfolge angeordnet ist. Wenn die Anwesenheit aufgerufen wird, wird das Vorhandensein/Fehlen durch die Spracherkennung erkannt und in der Spalte Präsentieren/Abwesend aufgefüllt.

Ich habe 2 Fragen -

a) Ich brauche Textviews für genau die gleiche Anzahl von Zeilen für Spalte Schülernamen und Studenten Ankunftszeit Auch

b) zu erstellen, wenn ich Textviews für genau gleiche Anzahl erstellen von Zeilen, wie ändere ich die Textview Wert auf Ja oder Nein, jedes Mal, weil einmal ändert Textview wird sie für Rest

Antwort

0

ich denke, ändern, sollten Sie RecyclerView

verwenden 0 können Sie eine sehr gute Beschreibung finden wie RecyclerView verwenden

Hier ist mein Beispiel, wie es aussehen sollte:

YourFragment

public class YourFragment extends Fragment { 

    private RecyclerView recyclerView; 
    private RecyclerView.Adapter adapter; 
    private RecyclerView.LayoutManager layoutManager; 
    private List<Student> studentList; 

    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 

     studentList = new ArrayList<>(); 

     recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView); 
     layoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false); 
     adapter = new StudentsAdapter(studentList); 

     recyclerView.setLayoutManager(layoutManager); 
     recyclerView.setAdapter(adapter); 

     //This method fetch students list from server and insert them into studentList 
     fetchStudentsList(); 
    } 
} 

StudentsAdapter

public class StudentsAdapter extends RecyclerView.Adapter<StudentsAdapter.ViewHolder> { 

    private List<Student> studentList; 

    public StudentsAdapter(List<Student> studentList) { 
     this.studentList = studentList; 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 
     View itemView = inflater.inflate(R.layout.student_layout, parent, false); 
     ViewHolder holder = new ViewHolder(itemView); 
     holder.name = (TextView) itemView.findViewById(R.id.student_name); 
     holder.arrivalTime = (TextView) itemView.findViewById(R.id.student_arrival_time); 
     holder.present = (TextView) itemView.findViewById(R.id.student_present); 
     return holder; 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
     Student student = studentList.get(position); 
     holder.name.setText(student.name); 
     holder.arrivalTime.setText(student.arrivalTime); 
     holder.present.setText(student.present ? R.string.yes : R.string.no); 
    } 

    @Override 
    public int getItemCount() { 
     return studentList.size(); 
    } 

    public static class ViewHolder extends RecyclerView.ViewHolder { 

     public TextView name; 
     public TextView arrivalTime; 
     public TextView present; 

     public ViewHolder(View itemView) { 
      super(itemView); 
     } 
    } 
} 

Student.class

public class Student { 
    public String arrivalTime; 
    public String name; 
    public boolean present; 
} 

einige Informationen in recyclerView, nur Wert ändern in Student Objekt zu aktualisieren und dann rufen Methode adapter.notifyDataSetChanged()

Siehe auch:

+0

Ist es möglich, dass ich die Position der abstrakten Listenansicht und auf der Grundlage der Position bekommen konnte, ich aktualisieren Textview – Alb609

+0

Ja, können Sie Methode 'studentList.indexOf (studentA) verwenden;' wo 'studentA' ein' Student'-Objekt ist. Die Methode indexOf verwendet die Methode 'equals', um zwei Objekte zu vergleichen. Sie müssen also die Methode' equals' in 'Student.class' überschreiben und zwei Schüler vergleichen, zum Beispiel: nach Name – RediOne1

Verwandte Themen