2017-09-28 4 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; 
} 

J'ai vu beaucoup de solution pour cela mais cela ne fonctionne pas pour moi. Chaque fois que vous faites défiler, les valeurs ListView sont effacées.EditText Valeurs se dégager sur le défilement listview android

Répondre

0

Espérons que cela fonctionne ...

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

ne fonctionne pas Monsieur! valeurs changées sur Scrolling listview –

0

Vous devez mettre à jour les valeurs de EditText à nouveau dans la liste des étudiants en raison de la nature de recyclage de vue de la liste et également définir la valeur de chaque méthode de GetView de temps est appelé.

Quelque chose comme:

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

Ne fonctionne pas Monsieur, le même problème arrive! –

+0

Pouvez-vous partager votre code pour la liste quelque part? Je pense qu'il pourrait y avoir un autre problème avec le code. D'après ce que j'ai compris, le edittext pour les marques doit sauver la valeur quand la vue sort de l'écran, non? Theres une autre solution dans laquelle vous pouvez faire holder.setIsRecyclable (false); dans les vues recycleur mais je déconseillerais cela. –

0

Essayez ceci:

@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:

Remplacer méthode getCount() dans ArrayAdaptor:

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

Ne fonctionne pas! ... –

+0

Que le problème n'est pas avec votre ArrayAdaptor, problème est avec votre mise en page xml ou ensemble de données ou de toute autre partie du code. Pouvez-vous fournir plus de détails? –

+0

J'ai posté un code complet de l'adaptateur de tableau, vous avez besoin de code xml pour objet gonflé? –

0

Essayez:

@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

Ne fonctionne pas, les données sont toujours claires! –