Как настроить Spinner Into Recyclerview Adapter - PullRequest
0 голосов
/ 04 марта 2020

Я знаю, что об этом спрашивали несколько раз, но я не совсем понимаю. У меня есть адаптер, и для каждого предмета мне нужно настроить счетчик. Для контекста, я работаю над своего рода приложением по продаже товаров. Таким образом, адаптер заполнен продуктами из продажи, и у счетчика должно быть столько же вариантов, сколько у продукта в этой продаже, что в моем коде является величиной количества.

Вот мой код адаптера

public class MoneyDevolutionAdapter extends RecyclerView.Adapter < MoneyDevolutionAdapter.SaleDetailsViewHolder > implements View.OnClickListener {
    private List < SaleDetail > saleDetailList;
    private View.OnClickListener listener;
    private List < Integer > quantityList;

    public MoneyDevolutionAdapter(List < SaleDetail > saleDetailList) {
        this.saleDetailList = saleDetailList;
    }

    @NonNull
    @Override
    public MoneyDevolutionAdapter.SaleDetailsViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.adapter_money_devolution, viewGroup, false);
        v.setOnClickListener(this);
        return new MoneyDevolutionAdapter.SaleDetailsViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull MoneyDevolutionAdapter.SaleDetailsViewHolder saleDetailsViewHolder, int i) {
        Product product = new Product().findProductById(saleDetailList.get(i).idProduct);
        if (product != null) {
            saleDetailsViewHolder.txtNameSaleDetailsAdapter.setVisibility(View.VISIBLE);
            saleDetailsViewHolder.txtNameSaleDetailsAdapter.setText("" + product.nameProduct);
        }
        saleDetailsViewHolder.txtIdSaleDetailsAdapter.setText("" + saleDetailList.get(i).idProduct);
        saleDetailsViewHolder.txtQuantitySaleDetailsAdapter.setText("" + saleDetailList.get(i).quantity);
        saleDetailsViewHolder.txtSVSaleDetailsAdapter.setText("" + Tools.setDecimalFormat().format(saleDetailList.get(i).unitValue));
        saleDetailsViewHolder.txtValuetotSaleDetailsAdapter.setText("" + Tools.setDecimalFormat().format(saleDetailList.get(i).totValue));
    }

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

    public void setOnClickListener(View.OnClickListener listener) {
        this.listener = listener;
    }

    @Override
    public void onClick(View v) {
        if (listener != null) {
            listener.onClick(v);
        }
    }

    static class SaleDetailsViewHolder extends RecyclerView.ViewHolder {
        TextView txtNameSaleDetailsAdapter;
        TextView txtIdSaleDetailsAdapter;
        TextView txtQuantitySaleDetailsAdapter;
        TextView txtSVSaleDetailsAdapter;
        TextView txtValuetotSaleDetailsAdapter;
        Spinner spnQuantityProduct;

        SaleDetailsViewHolder(View itemView) {
            super(itemView);
            txtNameSaleDetailsAdapter = itemView.findViewById(R.id.txtNameSaleDetailsAdapter);
            txtIdSaleDetailsAdapter = itemView.findViewById(R.id.txtIdSaleDetailsAdapter);
            txtQuantitySaleDetailsAdapter = itemView.findViewById(R.id.txtQuantitySaleDetailsAdapter);
            txtSVSaleDetailsAdapter = itemView.findViewById(R.id.txtSVSaleDetailsAdapter);
            txtValuetotSaleDetailsAdapter = itemView.findViewById(R.id.txtValuetotSaleDetailsAdapter);
            spnQuantityProduct = itemView.findViewById(R.id.spnQuantityProducttoDevolution);
        }
    }
}

Любая помощь или предложения о том, как подойти к созданию сппинера внутри карты, было бы здорово, спасибо!

1 Ответ

1 голос
/ 04 марта 2020

попробуйте это внутри onBindViewHolder:

List<String> quantityArray = qArray(saleDetailList.get(i).quantity);
        ArrayAdapter<String> dataAdapter =
                new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item, quantityArray);
        dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        saleDetailsViewHolder.spnQuantityProduct.setAdapter(dataAdapter);

и затем реализуйте функцию qArray

 private static List<String> qArray(int quantity){
        List<String> stringsArray = new ArrayList<>();

        for (int i=0;i<quantity;i++){
            stringsArray.add(String.valueOf(i+1));
        }
        return stringsArray;
    }
...