2017-09-28 1 views
1
public class Custom_Student_marks_list_faculty_adapter extends ArrayAdapter<MarksStudentListFacultyObject> { 
    private Activity context; 
    private List<MarksStudentListFacultyObject> studentlist; 

    public Custom_Student_marks_list_faculty_adapter(Activity context,List<MarksStudentListFacultyObject> studentlist) { 
     super(context,R.layout.custom_listview_marks_faculty,studentlist); 
     this.context=context; 
     this.studentlist=studentlist; 
    } 

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

     final ViewHolder holder; 
     if(convertView==null) { 
      LayoutInflater inflater = context.getLayoutInflater(); 
      convertView = inflater.inflate(R.layout.custom_listview_marks_faculty, null); 
      holder = new ViewHolder(); 
      holder.name = (TextView) convertView.findViewById(R.id.custom_listview_marks_faculty_stu_name_id); 
      holder.marks = (EditText) convertView.findViewById(R.id.custom_listview_marks_faculty_stu_marks_id); 
      String mark = holder.marks.getText().toString(); 

      MarksStudentListFacultyObject student_list = studentlist.get(position); 

      holder.name.setText(student_list.getName()); 
      holder.marks.setText(mark); 
      holder.marks.setTag(position); 
      convertView.setTag(holder); 
     } else { 
      holder =(ViewHolder)convertView.getTag(); 
     } 

     holder.name.setText(studentlist.get(position).getName()); 
     holder.marks.setText(studentlist.get(position).getMakrs()); 

     return convertView; 
    } 
} 

class ViewHolder { 
    protected TextView name; 
    protected EditText marks; 
} 

Ich habe viele Lösungen dafür gesehen, aber es funktioniert nicht für mich. Bei jedem Scrollen werden die Werte ListView gelöscht.EditText Werte werden beim Scrollen von Listenansicht Android

Antwort

0

Hoffnung dies funktionieren wird ...

public Custom_Student_marks_list_faculty_adapter(Activity context,List<MarksStudentListFacultyObject> studentlist) { 
     super(context,R.layout.custom_listview_marks_faculty,studentlist); 
     this.context=context; 
     this.studentlist=studentlist; 
    } 


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

     final ViewHolder holder; 
     if(convertView==null) { 
      LayoutInflater inflater = context.getLayoutInflater(); 
      convertView = inflater.inflate(R.layout.custom_listview_marks_faculty, null); 
      holder = new ViewHolder(); 
      holder.name = (TextView) convertView.findViewById(R.id.custom_listview_marks_faculty_stu_name_id); 
      holder.marks = (EditText) convertView.findViewById(R.id.custom_listview_marks_faculty_stu_marks_id); 
      convertView.setTag(holder); 
     } else { 
      holder =(ViewHolder)convertView.getTag(); 
     } 

      MarksStudentListFacultyObject student_list = studentlist.get(position); 
      holder.name.setText(student_list.getName()); 
      //holder.marks.setText(student_list.getMarks()); 

     return convertView; 
    } 
+0

funktioniert nicht Sir! Werte werden geändert auf Scrolling Listview –

0

Sie müssen die EditText Werte wieder in Studentenliste aktualisieren, da der Recycling Natur der Listenansicht und stellen Sie auch den Wert für jedes Verfahren Zeit GetView ist namens.

Etwas wie:

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

    final ViewHolder holder; 
    if(convertView==null) { 
     LayoutInflater inflater = context.getLayoutInflater(); 
     convertView = inflater.inflate(R.layout.custom_listview_marks_faculty, null); 
     holder = new ViewHolder(); 
     holder.name = (TextView) convertView.findViewById(R.id.custom_listview_marks_faculty_stu_name_id); 
     holder.marks = (EditText) convertView.findViewById(R.id.custom_listview_marks_faculty_stu_marks_id); 
     convertView.setTag(holder); 
    } else { 
     holder =(ViewHolder)convertView.getTag(); 
    } 

     MarksStudentListFacultyObject student_list = studentlist.get(position); 
     holder.name.setText(student_list.getName()); 
     holder.marks.setText(student_list.getMarks()); 
     holder.marks.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence s, int start, 
       int before, int count) { 
      //set data to array when changed 
      student_list.setMarks(s.toString()); 
     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, 
       int count, int after) { 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 

     } 
    }); 

    return convertView; 
} 
+0

Funktioniert nicht Sir, immer noch das gleiche Problem kommt! –

+0

Können Sie Ihren Code für die Liste irgendwo teilen? Ich denke, es könnte ein anderes Problem mit dem Code geben. Von dem, was ich verstanden habe, muss der Edittext für Marken den Wert speichern, wenn die Ansicht aus dem Bildschirm herauskommt, richtig? Theres eine andere Lösung, in der Sie tun können holder.setIsRecycable (false); in Recycler Ansichten, aber ich würde davon abraten. –

0

Versuchen Sie folgendes:

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

    if(convertView==null) { 
     LayoutInflater inflater = context.getLayoutInflater(); 
     convertView = inflater.inflate(R.layout.custom_listview_marks_faculty, null); 
    } 

    TextView name = (TextView) convertView.findViewById(R.id.custom_listview_marks_faculty_stu_name_id); 
    EditText marks = (EditText) convertView.findViewById(R.id.custom_listview_marks_faculty_stu_marks_id); 

    name.setText(studentlist.get(position).getName()); 
    marks.setText(studentlist.get(position).getMakrs()); 

    return convertView; 
} 

Edit:

Aufschalten getCount() -Methode in ArrayAdaptor:

@Override public int getCount(){ return studentlist.size(); } 
+0

funktioniert nicht! ... –

+0

Dann ist das Problem nicht mit Ihrem ArrayAdaptor, Issue ist mit Ihrem XML-Layout oder Datensatz oder einem anderen Teil des Codes. Können Sie weitere Einzelheiten angeben? –

+0

Ich habe den vollständigen Code des Array-Adapters gepostet, benötigen Sie XML-Code für das aufgeblasene Objekt? –

0

Versuchen:

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

     final ViewHolder holder; 
     if(convertView==null) { 
      LayoutInflater inflater = context.getLayoutInflater(); 
      convertView = inflater.inflate(R.layout.custom_listview_marks_faculty, null); 
      holder = new ViewHolder(); 
      holder.name = (TextView) convertView.findViewById(R.id.custom_listview_marks_faculty_stu_name_id); 
      holder.marks = (EditText) convertView.findViewById(R.id.custom_listview_marks_faculty_stu_marks_id); 
         convertView.setTag(holder); 
     } else { 
      holder =(ViewHolder)convertView.getTag(); 
     } 


     String mark = holder.marks.getText().toString(); 

      MarksStudentListFacultyObject student_list = studentlist.get(position); 

      holder.name.setText(student_list.getName()); 
      holder.marks.setText(mark); 


      return convertView; 
    } 
} 
+0

Nicht funktioniert, Daten werden immer noch klar! –

Verwandte Themen