gpt4 book ai didi

android - 滚动带有 Spinner 的 ListView 时如何在 Spinner 中保持值(value)?

转载 作者:太空狗 更新时间:2023-10-29 15:52:08 26 4
gpt4 key购买 nike

我正面临这个问题,已经阅读了很多问题/答案但无法解决。

我有一个带有微调器的 ListView(用户必须为该行中的产品选择一个数量),但是当项目多于 View 并且在微调器中选择一个数字后滚动 ListView 时,这个数字消失并且再次显示默认值。

我在 ListView 本身的适配器内部创建了一个 Spinner 适配器:

    final ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(context, R.layout.layout_spinner_quanitdade, quantities) {

public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);
((TextView) v).setTextSize(18);
return v;
}

public View getDropDownView(int position, View convertView, ViewGroup parent) {
View v = super.getDropDownView(position, convertView, parent);
((TextView) v).setGravity(Gravity.END);
return v;
}
};

holder.spinnerQuantidade.setAdapter(spinnerAdapter);
holder.spinnerQuantidade.setOnItemSelectedListener(new OnItemSelectedListener() {

@Override
public void onItemSelected(AdapterView<?> parent, View view, int spinnerPosition, long id) {

String newQuantity = quantities[spinnerPosition];
item.setQuantidade(newQuantity);

Spinner theSpinner = (Spinner) parent;
theSpinner.setSelection(spinnerPosition);
}

@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});

在尝试在微调器中选择一个值之前(查看带有 IMEI 字样的行): enter image description here

在微调器中为该行选择一个值后: enter image description here

向上滚动然后向下滚动后(值变回 1,而不是我选择的 10): enter image description here

更新:更改为尝试保留和设置微调器选择,但没有用:

    public View getView(final int modelPosition, View view, ViewGroup parent) {
ViewHolder holder = null;
final Produto item = getItem(modelPosition);

LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (view == null) {
view = mInflater.inflate(R.layout.item_view_produto, parent, false);
holder = new ViewHolder();
holder.textViewCodigo = (TextView) view.findViewById(R.id.textViewCodigo);
holder.textViewNome = (TextView) view.findViewById(R.id.textViewNome);
holder.spinnerQuantidade = (Spinner) view.findViewById(R.id.spinnerQuantidade);
holder.spinnerQuantidade.setTag(modelPosition);

CheckBox chk = (CheckBox) view.findViewById(R.id.checkBox);
holder.checkBox = chk;
holder.checkBox.setTag(modelPosition);

view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}

if (modelPosition % 2 == 0) {
view.setBackgroundResource(R.drawable.cor_zebra2);
} else {
view.setBackgroundResource(R.drawable.cor_zebra1);
}

holder.textViewCodigo.setText(item.getCodigo());
holder.textViewNome.setText(item.getDescricao().trim());

// checking and settion spinner selection - DID NOT WORK
if (mapRowSpinnerPos.containsKey(modelPosition)) {
holder.spinnerQuantidade.setSelection(mapRowSpinnerPos.get(modelPosition));
}

if (this.showChecks) {
holder.spinnerQuantidade.setVisibility(View.GONE);

holder.checkBox.setOnCheckedChangeListener(null);
holder.checkBox.setChecked(item.isChecked());
holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
item.setChecked(isChecked);
if (isChecked) {
selectedList.add(item);
} else {
selectedList.remove(item);
}
}
});
} else {
// situation 2: show spinners
holder.checkBox.setVisibility(View.GONE);

final ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(context, R.layout.layout_spinner_quanitdade, quantities) {

public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);
((TextView) v).setTextSize(18);
return v;
}

public View getDropDownView(int position, View convertView, ViewGroup parent) {
View v = super.getDropDownView(position, convertView, parent);
((TextView) v).setGravity(Gravity.END);
return v;
}
};

holder.spinnerQuantidade.setAdapter(spinnerAdapter);
holder.spinnerQuantidade.setOnItemSelectedListener(new OnItemSelectedListener() {

@Override
public void onItemSelected(AdapterView<?> parent, View view, int spinnerPosition, long id) {

// int thePosition = (Integer) parent.getTag();
mapRowSpinnerPos.put(modelPosition, spinnerPosition);

String newQuantity = quantities[spinnerPosition];
item.setQuantidade(newQuantity);

}

@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}

return view;
}

最佳答案

设置适配器后移动以下代码。设置适配器会将其设置到第一个位置。

if (mapRowSpinnerPos.containsKey(modelPosition)) {
holder.spinnerQuantidade.setSelection(mapRowSpinnerPos.get(modelPosition));
}

关于android - 滚动带有 Spinner 的 ListView 时如何在 Spinner 中保持值(value)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31051704/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com