Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ArrayAdapter复选框行为_Android_Android Arrayadapter - Fatal编程技术网

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))