У меня возникла эта проблема: в то время как представление списка повторяет представления, оно дублирует данные, вставленные в текст редактирования, и мне нужно только, чтобы тексты редактирования не дублировались, так что я получу правильное количество. Я пытался не перерабатывать представления, но при удалении прокручивал значения.
public class ArticleAdapter extends ArrayAdapter<Article>
{
public static List<Livraison_detail> MAJdb=new ArrayList<Livraison_detail>();;
ViewHolder viewHolder;
List<Article> articles=null;
String []qtes;
public ArticleAdapter(Context context, int resource, List<Article> objects)
{
super(context, resource, objects);
articles=new ArrayList<>(objects);
qtes=new String[articles.size()];
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
viewHolder= new ViewHolder();
if(convertView==null){
LayoutInflater infalter=LayoutInflater.from(getContext());
convertView=infalter.inflate(R.layout.list_view_article,parent,false);
viewHolder.designation = (TextView) convertView.findViewById(R.id.desi);
viewHolder.quantité = (TextView) convertView.findViewById(R.id.qte_disp_2);
viewHolder.prix = (TextView) convertView.findViewById(R.id.prix);
viewHolder.qte=(EditText) convertView.findViewById(R.id.qte);
viewHolder.cb=(CheckBox)convertView.findViewById(R.id.cbarticle);
viewHolder.cb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
CheckBox check=(CheckBox)view;
check.requestFocus();
if (check.isChecked())
{
Article a =articles.get((int)check.getTag());
Livraison_detail l=new Livraison_detail();
l.CODE_ARTICLE=a.CODE_ARTICLE;
l.PRIX_ACHAT=a.PRIX_VENTE;
try
{
if(qtes[(int)check.getTag()].equals(""))
{
throw new Exception();
}else {
if (Double.parseDouble(qtes[(int)check.getTag()])>a.QTE_CHARGE) throw new QuantitéInsuffisanteException();
else{
l.QTE_LIVRE=Double.parseDouble(qtes[(int)check.getTag()]);
MAJdb.add(l);
}
}
}
catch (QuantitéInsuffisanteException e)
{
new AlertDialog.Builder(getContext())
.setTitle("Quantité Insuffisante")
.setMessage("la quantité saisie est superieur que celle du Stock il y a "+a.QTE_CHARGE+" artcile Disp")
.setCancelable(true)
.setIcon(R.drawable.alert)
.setNeutralButton("Compris",null )
.show();
}
catch (Exception e)
{
Toast.makeText(getContext(), "Il faut toucher le fin bouton du clavier puis re-cochez", Toast.LENGTH_SHORT).show();
}
} else {
Article a2=articles.get((int)check.getTag());
for (Livraison_detail l:MAJdb) {
if (l.CODE_ARTICLE.equals(a2.CODE_ARTICLE))
{
MAJdb.remove(l);
}
}
}
}
});
viewHolder.qte.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final int position = view.getId();
final EditText Caption = (EditText) view;
qtes[position]=Caption.getText().toString();
if(Caption.isFocused()) {Caption.clearFocus();}
}
});
convertView.setTag(viewHolder);
convertView.setTag(R.id.cbarticle, viewHolder.cb);
convertView.setTag(R.id.qte, viewHolder.qte);
}
else {
viewHolder =(ViewHolder)convertView.getTag();
}
viewHolder.qte.setTag(position);
viewHolder.cb.setTag(position);
viewHolder.qte.setId(position);
Article article=articles.get(position);
if(article !=null)
{
viewHolder.designation.setText(article.DESIGNATION);
viewHolder.prix.setText(Double.toString(article.PRIX_VENTE));
viewHolder.quantité.setText(Integer.toString(article.QTE_CHARGE));
}
return convertView;
}
private class ViewHolder
{
TextView designation;
TextView quantité;
TextView prix;
EditText qte;
CheckBox cb;
}
}