Как изменить значения переменных из RecyclerView, которые представлены в этом представлении переработчика - PullRequest
0 голосов
/ 10 апреля 2020

У меня следующая ситуация: на моем экране вид переработчика. По умолчанию он имеет 3 объекта с пустыми переменными. ViewHolder для этого вида рециркулятора содержит 2 EditTexts. И мне нужно сделать это представление переработчика таким образом, чтобы каждый раз, когда пользователь вводил что-то в EditText, это значение также должно было быть установлено в соответствующую переменную объекта, который принадлежит этому элементу. Например, есть EditText, где пользователь может ввести название продукта. Это имя должно быть добавлено в EditText, а также это имя должно быть установлено в качестве значения переменной product.name. Вот как теперь выглядит этот экран:

enter image description here

А вот как реализован адаптер:

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

    private List<StockItem> stockItems = new ArrayList<>();

    public BillProductsAdapter() {
        stockItems.add(new StockItem());
        stockItems.add(new StockItem());
        stockItems.add(new StockItem());
    }

    public void addRow() {
        stockItems.add(new StockItem());
        notifyDataSetChanged();
    }

    public List<StockItem> getStockItems() {
        return stockItems;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.bill_product_element, parent, false);
        return new ViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {

    }

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

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public int getItemViewType(int position) {
        return R.layout.bill_product_element;
    }

    static class ViewHolder extends RecyclerView.ViewHolder {

        EditText name;
        EditText amount;

        ViewHolder(@NonNull View itemView) {
            super(itemView);

            name = itemView.findViewById(R.id.name_et);
            amount = itemView.findViewById(R.id.amount_et);

        }

    }

}

Метод Когда я нажимаю кнопку «Сохранить», выполняется выполнение get, поэтому я пытался реализовать получение значений logi c в этом методе, но я не смог их получить, поскольку здесь нет параметра viewHolder. Итак, я буду признателен за любую помощь. Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 10 апреля 2020

Вы можете установить значение Edittext для вашей модели в onBindViewholder

holder.name.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                Your_model.add(s.toString());
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });
0 голосов
/ 10 апреля 2020

Вы можете сделать это следующим образом:

val viewHolder = mRecyclerView?.findViewHolderForAdapterPosition(position)
val amount = (viewHolder as ViewHolder).amount
amount.text = "6"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...