【问题标题】:Problem with spinner in Recyclerview androidRecyclerview android中的微调器问题
【发布时间】:2021-01-07 06:20:14
【问题描述】:

Recyclerview 项目包含微调器和文本视图。所有项目的微调器均已正确设置。每当第 i 个项目微调器更改时,第 i 个项目文本视图值也将更改。 这里的问题是,一个项目微调器单击操作会更改其他项目微调器的值。

适配器类:

public void onBindViewHolder(@NonNull final MyViewHolder holder, final int position) {

    //do not re-initialize spinner when behaviour of item is changing
        if (holder.spinnerWeightUnit.getAdapter() == null) {

            List<String> unit_list = new ArrayList<>();
                for (Productsku x : productskuList) {
                    unit_list.add(x.getWeight() + x.getUnit());
                }
                initializeUnitSpinner(holder.spinnerWeightUnit, unit_list);
                holder.spinnerWeightUnit.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                    @Override
                    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                        Timber.d("adapter item changed");
                        setPriceStockValues(holder, position, i);
                    }
                    @Override
                    public void onNothingSelected(AdapterView<?> adapterView) {}
                });
            }
}

private void initializeUnitSpinner(Spinner spinnerUnit, List<String> unit_list) {
        ArrayAdapter<String> unitArrayAdapter = new ArrayAdapter<>(mContext, android.R.layout.simple_spinner_item, unit_list);
        unitArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinnerUnit.setAdapter(unitArrayAdapter);
}

private void setPriceStockValues(MyViewHolder holder, int position, int unit_position) {
    //set textviews
}

场景:

  1. 已选择第 0 项微调器值 -> 所有微调器均正确
  2. 已选择第一项微调器值 -> 所有微调器均正确
  3. 再次选择第 0 项微调器值 -> 所有微调器都设置为第 1 项的微调器值
  4. 再次选择第 1 项微调器值 -> 所有微调器都设置为第 0 项的微调器值 ..等等。

我无法找到解决方案。请问有人可以帮忙吗? 谢谢。

【问题讨论】:

    标签: android android-recyclerview android-spinner


    【解决方案1】:

    尝试删除此行

    if (holder.spinnerWeightUnit.getAdapter() == null)
    

    在每次调用 onBindViewHolder 时设置您的适配器。 RecyclerView 使用回收模式 - 重复使用以前使用/显示的 Views/ViewHolders。以上if 防止在适当位置重新设置特定项目,保持旧OnItemSelected 监听器和适配器

    【讨论】:

    • 那么如何设置之前选择的微调器值?
    • 为每个位置保留当前选择的项目,并在调用onBindViewHolder 时设置它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    相关资源
    最近更新 更多