1

似乎在一个非常奇怪的问题中,当我将项目标记为已检查时,列表视图的顺序会颠倒

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

4

1 回答 1

0

不要直接从列表中删除元素。
首先从 ArrayAdapter 的 ArrayList 中移除元素。
比使用新的 ArrayList 值重新创建/刷新列表视图。

于 2012-10-22T05:50:22.500 回答