android listview在setItemChecked上被反转

时间:2012-10-12 19:47:38

标签: android android-listview

在一个非常奇怪的问题中,当我使用

标记项目时,列表视图的顺序会被反转
listview.setItemChecked()

开发人员文档中没有与此相关的文档。我感谢任何帮助。

以下是检查项目部分的代码

CheckBox box = (CheckBox) convertView.findViewById(R.id.select);
box.setOnClickListener(new OnClickListener() {
    public void onClick(View view) {
        CheckBox checkBox = (CheckBox) view;
        list.setItemChecked(position + list.getHeaderViewsCount(), checkBox.isChecked());

        final long[] checkedItemIds = list.getCheckedItemIds();
        Log.d(Constants.TAG,
                "HomeActivity.onCreate(...).new EMListAdapter() {...}.getView(...).new OnClickListener() {...}.onClick: " + Arrays.toString(checkedItemIds));
        if (checkedItemIds.length > 0) {
            if (mMode == null) {
                mMode = startActionMode(new EashmartActionBar(HomeActivity.this) {
                    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
                        menu.add(R.string.delete).setIcon(R.drawable.bin).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
                        return true;
                    }

                    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
                        switch (item.getItemId()) {
                        case 0:
                            Log.d(Constants.TAG,
                                    "HomeActivity.onCreate(...).new EMListAdapter() {...}.getView(...).new OnClickListener() {...}.onClick(...).new EashmartActionBar() {...}.onActionItemClicked: "
                                            + Arrays.toString(checkedItemIds));
                            invoiceManager.delete(checkedItemIds);
                            break;
                        }
                        mode.finish();
                        mMode = null;
                        return true;
                    }

                    public void onDestroyActionMode(ActionMode mode) {
                        for (int i = 0; i < list.getCount(); i++) {
                            list.setItemChecked(i, false);
                        }
                        mMode = null;
                    }
                });
            }
        } else {
            if (mMode != null) {
                mMode.finish();
                mMode = null;
            }
        }
    }
});

问题似乎只发生在2.3而不是4.0

1 个答案:

答案 0 :(得分:0)

不要直接从列表中删除元素 首先从ArrayAdapter的ArrayList中删除元素 而不是使用新的ArrayList值重新创建/刷新listview。