Эффект RecyclerView для нескольких строк, когда он должен влиять только на одну - PullRequest
0 голосов
/ 26 мая 2020

Я получил повторный просмотр различных продуктов, и у каждого из них есть текст редактирования количества, когда я ввожу количество одного продукта, не только заполняющего текст редактирования, но и каждого дополнительного количества, кратного 11.

например: Я пишу в редактируемом тексте 1-й статьи, будет написано такое же количество и те же эффекты будут в статьях 11 и 22 ... как на картинках. Это то, что я ввожу в 1-й текст редактирования это то, что я нашел в 11-й статье

это класс статьи

public class Article {
public String désignation;
public int colis;
public double prix_unité;

public Article(String désignation, int colis, double prix_unité) {
    this.désignation = désignation;
    this.colis = colis;
    this.prix_unité = prix_unité;
}

}

это активность

articles = new ArrayList<>();
    CreateArticles();

    fab = findViewById(R.id.add);
    linearLayout = findViewById(R.id.total);
    total_global = findViewById(R.id.prix_global);
    prix_global = 0;

    recyclerView = this.findViewById(R.id.recycler_view);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    adapter = new MyAdapter(this, articles);
    recyclerView.setAdapter(adapter);

и мой адаптер

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyHolder> {
private ArrayList<Article> articles;
private Context context;

public static class MyHolder extends RecyclerView.ViewHolder{

    TextView désignation;
    TextView colis;
    TextView prix_unité;
    TextView total;
    EditText quant;


    public MyHolder(@NonNull View itemView) {
        super(itemView);
        désignation = itemView.findViewById(R.id.item_désignation);
        colis = itemView.findViewById(R.id.item_colis);
        prix_unité = itemView.findViewById(R.id.item_prix_unité);
        total = itemView.findViewById(R.id.item_total);
        quant = itemView.findViewById(R.id.item_quant);
    }
}

public MyAdapter(Context context, ArrayList<Article> articles) {
    this.context = context;
    this.articles = articles;
}

@NonNull
@Override
public MyHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    return new MyHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false));
}

@Override
public void onBindViewHolder(@NonNull final MyHolder holder, final int position) {
    holder.désignation.setText(articles.get(position).désignation);
    if (articles.get(position).désignation.equals("")) {
        holder.colis.setText("");
        holder.prix_unité.setText("");
        holder.quant.setVisibility(View.INVISIBLE);
    } else {
        holder.colis.setText("" + articles.get(position).colis);
        holder.prix_unité.setText("" + articles.get(position).prix_unité);
    }

    holder.quant.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            if (!holder.quant.getText().toString().equals("")) {
                int col = articles.get(position).colis;
                double pu = articles.get(position).prix_unité;
                int qua = Integer.parseInt(holder.quant.getText().toString());
                double result = col * qua * pu;
                MainActivity.prix_global -= result;
            }
        }

        @RequiresApi(api = Build.VERSION_CODES.M)
        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @RequiresApi(api = Build.VERSION_CODES.M)
        @Override
        public void afterTextChanged(Editable editable) {
            if (holder.quant.getText().toString().equals("")) {
                holder.total.setText("");
                holder.désignation.setTextColor(context.getColor(android.R.color.darker_gray));
                holder.colis.setTextColor(context.getColor(android.R.color.darker_gray));
                holder.prix_unité.setTextColor(context.getColor(android.R.color.darker_gray));
            } else {
                int col = articles.get(position).colis;
                double pu = articles.get(position).prix_unité;
                int qua = Integer.parseInt(holder.quant.getText().toString());
                double result = col * qua * pu;
                holder.total.setText("" + result);

                holder.désignation.setTextColor(Color.BLACK);
                holder.colis.setTextColor(Color.BLACK);
                holder.prix_unité.setTextColor(Color.BLACK);

                MainActivity.prix_global += result;
            }
            MainActivity.Total();
        }

    });
}

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

}

1 Ответ

0 голосов
/ 26 мая 2020

Несогласованность может быть связана с тем, что наблюдатель editText установлен в onBindViewHolder(), вместо этого я предлагаю вам установить наблюдателя в конструкторе класса MyHolder.

Сделайте вот так и сделать класс MyHolder нестационарным c и удалить код TextWatcher из onBindViewHolder():

public class MyHolder extends RecyclerView.ViewHolder{
TextView désignation;
TextView colis;
TextView prix_unité;
TextView total;
EditText quant;


public MyHolder(@NonNull View itemView) {
    super(itemView);
    désignation = itemView.findViewById(R.id.item_désignation);
    colis = itemView.findViewById(R.id.item_colis);
    prix_unité = itemView.findViewById(R.id.item_prix_unité);
    total = itemView.findViewById(R.id.item_total);
    quant = itemView.findViewById(R.id.item_quant);

    //here set the text watchers on the quant:

    quant.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
        if (!quant.getText().toString().equals("")) {
            int col = articles.get(getAdapterPosition()).colis;
            double pu = articles.get(getAdapterPosition()).prix_unité;
            int qua = Integer.parseInt(quant.getText().toString());
            double result = col * qua * pu;
            MainActivity.prix_global -= result;
        }
    }

    @RequiresApi(api = Build.VERSION_CODES.M)
    @Override
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

    }

    @RequiresApi(api = Build.VERSION_CODES.M)
    @Override
    public void afterTextChanged(Editable editable) {
        if (quant.getText().toString().equals("")) {
            total.setText("");

  désignation.setTextColor(context.getColor(android.R.color.darker_gray));
  colis.setTextColor(context.getColor(android.R.color.darker_gray));

  prix_unité.setTextColor(context.getColor(android.R.color.darker_gray));
        } else {
            int col = articles.get(getAdapterPosition()).colis;
            double pu = articles.get(getAdapterPosition()).prix_unité;
            int qua = Integer.parseInt(quant.getText().toString());
            double result = col * qua * pu;
            total.setText("" + result);

            désignation.setTextColor(Color.BLACK);
            colis.setTextColor(Color.BLACK);
            prix_unité.setTextColor(Color.BLACK);

            MainActivity.prix_global += result;
        }
        MainActivity.Total();
    }

});



}
}
...