android listview在setItemChecked上反转

android listview在setItemChecked上反转,android,android-listview,Android,Android Listview,在一个非常奇怪的问题中,当我使用 listview.setItemChecked() 开发人员文档中没有与此相关的文档。谢谢你的帮助 以下是检查项目部分的代码 CheckBox box = (CheckBox) convertView.findViewById(R.id.select); box.setOnClickListener(new OnClickListener() { public void onClick(View view) { CheckBox che

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

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;
            }
        }
    }
});
CheckBox=(CheckBox)convertView.findViewById(R.id.select);
setOnClickListener(新的OnClickListener(){
公共void onClick(视图){
复选框=(复选框)视图;
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));
如果(checkedItemIds.length>0){
如果(mMode==null){
mMode=startActionMode(新的EashmartActionBar(HomeActivity.this){
公共布尔onCreateActionMode(ActionMode模式,菜单){
menu.add(R.string.delete)、setIcon(R.drawable.bin)、setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
返回true;
}
公共布尔值onActionItemClicked(ActionMode模式,菜单项){
开关(item.getItemId()){
案例0:
Log.d(Constants.TAG,
“HomeActivity.onCreate(…).new-EMListAdapter(){…}.getView(…).new-OnClickListener(){…}.onClick(…).new-EashmartActionBar(){…}.onActionItemClicked:”
+toString(checkedItemIds));
invoiceManager.delete(checkedItemIds);
打破
}
mode.finish();
mMode=null;
返回true;
}
公共void onDestroyActionMode(ActionMode模式){
对于(int i=0;i

这个问题似乎只发生在2.3上,而不是4.0上。不要直接从列表中删除元素。
首先从ArrayAdapter的ArrayList中删除元素。

然后使用新的ArrayList值重新创建/刷新listview。

请描述“反转”…反转为第一项变为最后一项,最后一项变为第一项OK,您是对的,这不是“正常”行为。请发布相关代码,以便我们可以看到发生了什么。这些代码看起来不错,因此我们可能需要整个适配器和listactivity/fragment来查看发生了什么。尝试创建一个简单的单活动应用程序来复制该问题。当您填写列表时,您是否使用在选中时排序的查询?我不会在任何地方从列表中删除该项目InvoiceManager.delete(CheckEdItemId);即向服务器发送从数据库中删除该项的请求,并从适配器中删除该项。