Recyclerview 中的旋转器问题 android
Problem with spinner in Recyclerview android
Recyclerview 项目包含微调器和文本视图。所有项目的微调器都已正确设置。每当第 i 个项目微调器更改时,第 i 个项目的文本视图值也将更改。
这里的问题是,一项微调器单击操作会更改其他项目微调器的值。
适配器class:
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
}
场景:
- 已选择第 0 个项目的微调器值 -> 所有微调器都是正确的
- 已选择第一项微调器值 -> 所有微调器都是正确的
- 再次选择第 0 个项目的微调器值 -> 所有微调器都设置为第 1 个项目的微调器值
- 再次选择第一项微调器值 -> 所有微调器都设置为第 0 项的微调器值
..等等。
我找不到解决办法。请问有人可以帮忙吗?
谢谢。
尝试删除此行
if (holder.spinnerWeightUnit.getAdapter() == null)
每次 onBindViewHolder
接到电话时设置您的适配器。 RecyclerView
使用回收模式 - 重复使用之前的 used/shown View
s/ViewHolder
s。以上 if
防止在适当的位置重新设置 paticluar 项目,保留旧的 OnItemSelected
侦听器和适配器
Recyclerview 项目包含微调器和文本视图。所有项目的微调器都已正确设置。每当第 i 个项目微调器更改时,第 i 个项目的文本视图值也将更改。 这里的问题是,一项微调器单击操作会更改其他项目微调器的值。
适配器class:
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
}
场景:
- 已选择第 0 个项目的微调器值 -> 所有微调器都是正确的
- 已选择第一项微调器值 -> 所有微调器都是正确的
- 再次选择第 0 个项目的微调器值 -> 所有微调器都设置为第 1 个项目的微调器值
- 再次选择第一项微调器值 -> 所有微调器都设置为第 0 项的微调器值 ..等等。
我找不到解决办法。请问有人可以帮忙吗? 谢谢。
尝试删除此行
if (holder.spinnerWeightUnit.getAdapter() == null)
每次 onBindViewHolder
接到电话时设置您的适配器。 RecyclerView
使用回收模式 - 重复使用之前的 used/shown View
s/ViewHolder
s。以上 if
防止在适当的位置重新设置 paticluar 项目,保留旧的 OnItemSelected
侦听器和适配器