Android ArrayAdapter复选框行为
我有一个带有自定义组件和复选框的Android ArrayAdapter复选框行为,android,android-arrayadapter,Android,Android Arrayadapter,我有一个带有自定义组件和复选框的ArrayAdapter。当我选中一个项目并向下滚动(在getView()中创建了新项目)时,以前未选中的复选框将标记为选中。我部分理解它为什么会发生,但如何避免它 下面是我的getView(…)方法: @Override public View getView(final int position, final View convertView, final ViewGroup parent) {
ArrayAdapter
。当我选中一个项目并向下滚动(在getView()
中创建了新项目)时,以前未选中的复选框将标记为选中。我部分理解它为什么会发生,但如何避免它
下面是我的getView(…)
方法:
@Override
public View getView(final int position, final View convertView,
final ViewGroup parent) {
View v = convertView;
TagHolder tagHolder = null;
if (v == null) {
Log.d("Inside adapter getView()", "Extras have "
+ CurrentRequest.getCarDetalized().getExtra()
.size() + " items");
final LayoutInflater vi = (LayoutInflater) getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.additional_component, null);
tagHolder = new TagHolder();
tagHolder.extraName = (TextView) v
.findViewById(R.id.additional_info);
tagHolder.extraPrice = (TextView) v
.findViewById(R.id.additional_price);
v.setTag(tagHolder);
tagHolder.box = (CheckBox) v.findViewById(R.id.select);
tagHolder.box.setOnCheckedChangeListener(checkedItem);
} else {
tagHolder = (TagHolder) v.getTag();
}
try {
final CarDetails.Extra extra = getItem(position);
tagHolder.box.setTag(position);
tagHolder.extraName.setText(extra.getName());
tagHolder.extraPrice.setText(extra.getCurrency() + " "
+ extra.getPrice());
Log.d("Adapter",
"Set up adapter field with name " + extra.getName());
Log.d("Inside adapter", "extras size is "
+ d.getExtra().size());
} catch (final Exception e) {
e.printStackTrace();
System.exit(0);
Log.e("CarList", "Error setting cell" + e);
}
return v;
}
已解决!Android在滚动时重用上一行;其中一些行已被检查。您需要直接设置它:
final CarDetails.Extra extra = getItem(position);
tagHolder.box.setTag(position);
tagHolder.extraName.setText(extra.getName());
tagHolder.extraPrice.setText(extra.getCurrency() + " "
+ extra.getPrice())
// Add this:
tagHolder.box.setChecked(myMethodToCheckIfItemIsChecked(extra))