我面臨這個問題,並已閱讀了很多問題/答案,但無法解決它。如何在使用Spinner滾動ListView時保持Spinner中的值?
我有一個ListView與微調(用戶必須爲該產品在該行中選擇一個數量編號),但是當有更多的項目比視圖和ListView滾動後,選擇一個數字在微調號碼這個數字消失,默認值會再次顯示。
我在適配器內部創建一個適配器微調的ListView控件本身:
: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行)之前
在微調該行選擇一個值後:
滾動起來後,然後向下滾動(值變回1,研究所10的EAD我選擇):
UPDATE:改變要儘量保持並設置微調選擇,沒有工作:
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;
}
非常好,非常感謝你!我多麼傻! –