【发布时间】:2021-05-15 08:07:52
【问题描述】:
我有一个包含 11 行数据项的回收站视图。我需要在每行修复两个微调器。即第二个 Spinner 数据应该依赖于第一个 Spinner 数据的变化。虽然我正在正确加载新的条目数据。当我来编辑第一个微调器数据时,加载正确完成并且已经存在的数据已正确修复。 但在第二个微调器中,它显示了最后加载的项目的数据。即所有第二个微调器中都设置了最后一行(第 11 行)微调器数据。如何解决这个问题?
下面的代码在recyclerViewAdapter的onBindViewHolder()方法下
fortnightLookupList = gCache.getFortNightLookup();
for(int i = 0; i<fortnightLookupList.size(); i++){
funtioningSpinnerList.add(fortnightLookupList.get(i).getFunctioning());
}
reasoningAdapter =
new ArrayAdapter<>(thisActivity, android.R.layout.simple_spinner_item, funtioningSpinnerList);
reasoningAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
holder.functioningSpinner.setAdapter(reasoningAdapter);
if (entryStatus.equals(Constants.NEW)) {
holder.functioningSpinner.setOnItemSelectedListener(new AdapterView . OnItemSelectedListener () {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
if (pos > 0) {
remoteLocationEntryModelData.get(position).checkList =
funtioningSpinnerList.get(pos);
//loadScoreSpinner(funtioningSpinnerList.get(pos), holder, position);
scoreList.clear();
for (int i = 0; i < fortnightLookupList.size(); i++) {
if (fortnightLookupList.get(i).getFunctioning().equals(funtioningSpinnerList.get(pos)) ) {
scoreList.add(fortnightLookupList.get(i).getScore());
}
}
scoreAdapter =
new ArrayAdapter<>(thisActivity, android.R.layout.simple_spinner_item, scoreList);
scoreAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
holder.scoreSpinner.setAdapter(scoreAdapter);
} else {
remoteLocationEntryModelData.get(position).checkList = "$";
scoreList.clear();
scoreList.add(0, "---- select ----");
scoreAdapter =
new ArrayAdapter<>(thisActivity, android.R.layout.simple_spinner_item, scoreList);
scoreAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
holder.scoreSpinner.setAdapter(scoreAdapter);
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
} else if (entryStatus.equals(Constants.EDIT)) {
if (!TextUtils.isEmpty( String.valueOf( editList.getDescriptions().get(position).getLogId() ) ) ) {
remoteLocationEntryModelData.get(position).logId =
editList.getDescriptions().get(position).getLogId();
}
if (!TextUtils.isEmpty(editList.getDescriptions().get(position).getRemarks())) {
holder.remarksEdt.setText(editList.getDescriptions().get(position).getRemarks());
}
holder.functioningSpinner.setSelection(
funtioningSpinnerList.indexOf(
editList.getDescriptions().get(position).getCheckList()
)
);
holder.functioningSpinner.setOnItemSelectedListener(new AdapterView . OnItemSelectedListener () {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
if (pos > 0) {
remoteLocationEntryModelData.get(position).checkList =
funtioningSpinnerList.get(pos);
//loadScoreSpinner(funtioningSpinnerList.get(pos), holder, position);
scoreList.clear();
for (int i = 0; i < fortnightLookupList.size(); i++) {
if (fortnightLookupList.get(i).getFunctioning()
.equals(funtioningSpinnerList.get(pos))
) {
scoreList.add(fortnightLookupList.get(i).getScore());
}
}
scoreAdapter =
new ArrayAdapter<>(thisActivity, android.R.layout.simple_spinner_item, scoreList);
scoreAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
holder.scoreSpinner.setAdapter(scoreAdapter);
//holder.scoreSpinner.setSelection(scoreList.indexOf(editList.getDescriptions().get(position).getScore()));
} else {
remoteLocationEntryModelData.get(position).checkList = "$";
scoreList.clear();
scoreList.add(0, "---- select ----");
scoreAdapter =
new ArrayAdapter<>(thisActivity, android.R.layout.simple_spinner_item, scoreList);
scoreAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
holder.scoreSpinner.setAdapter(scoreAdapter);
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
注意 虽然我一步一步调试它,但它工作正常,但在运行时却不行
预期输出
【问题讨论】:
-
如果我理解正确,您有一个 RecyclerView,其中每个项目在项目内都有两个 Spinner,并附有 2 个 ArrayAdapter,对吗?您能否分享更多关于您从哪里获得用于填充两个 Spinner 的 ArrayAdapter 的列表的信息?
-
是的,你是对的@hardartcore ....数组适配器的名称是 reasoningAdapter 和 scoreAdapter 你可以找到这些。
-
funtioningSpinnerList怎么样?它从何而来?你能分享你得到这个列表的代码吗? -
它就在推理适配器的上方。像下面
fortnightLookupList = gCache.getFortNightLookup(); for(int i = 0; i<fortnightLookupList.size(); i++){ funtioningSpinnerList.add(fortnightLookupList.get(i).getFunctioning()); } -
最好将其发布到主要答案,但我认为问题在于此列表的填充方式。
标签: java android android-studio android-recyclerview