Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.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
Java 无法从ListView中删除listItem_Java_Android_Listview - Fatal编程技术网

Java 无法从ListView中删除listItem

Java 无法从ListView中删除listItem,java,android,listview,Java,Android,Listview,我使用这段代码是为了做到这一点,但它在这一点上是不起作用的。我可以选中复选框,当我单击按钮时,什么也没有发生 SimpleAdapter adapter; List<HashMap<String, String>> painItems = new ArrayList<HashMap<String, String>>(); ListView listthings; ... cb = (CheckBox)findViewById(R.i

我使用这段代码是为了做到这一点,但它在这一点上是不起作用的。我可以选中复选框,当我单击按钮时,什么也没有发生

SimpleAdapter adapter;
List<HashMap<String, String>> painItems = new ArrayList<HashMap<String, String>>();
ListView listthings;
   ...

    cb = (CheckBox)findViewById(R.id.checkBox1);    
    adapter = new SimpleAdapter(this, painItems, R.layout.mylistlayout,
            from, to);
    listthings.setAdapter(adapter);
    listthings.setOnItemClickListener(this);

    deleteButton = (Button) findViewById(R.id.deleteButton);
    deleteButton.setOnClickListener(this);

 ...

public void onClick(View v) {

    if (v == this.deleteButton) {
//      Toast.makeText(this, "delete clicked", Toast.LENGTH_SHORT).show();
        deleteCheckedItems();
    }
}

...
 private void deleteCheckedItems() {
    int count = this.listthings.getAdapter().getCount();
    for (int i = 0; i < count; i++) {
        if (this.listthings.isItemChecked(i)) {
            painItems.remove(i);
            adapter.notifyDataSetChanged();
                            listthings.invalidateViews();
        }
    }
simpledapter适配器;
List-items=new-ArrayList();
ListView listthings;
...
cb=(复选框)findViewById(R.id.checkBox1);
adapter=新的SimpleAdapter(此、painItems、R.layout.mylistlayout、,
从,到);
setAdapter(适配器);
setOnItemClickListener(this);
deleteButton=(Button)findViewById(R.id.deleteButton);
deleteButton.setOnClickListener(此);
...
公共void onClick(视图v){
if(v==this.deleteButton){
//Toast.makeText(这是“单击删除”,Toast.LENGTH_SHORT).show();
deleteCheckedItems();
}
}
...
私有void deleteCheckedItems(){
int count=this.listthings.getAdapter().getCount();
for(int i=0;i
感谢您的帮助。提前谢谢。

1)不要将适配器.notifyDataSetChanged();放入循环中,而是在deleteCheckedItems()之后

2) 为什么使用:listthings.invalidateViews();?您可以删除此行,这将重新绘制您的列表

3) 你为什么不接受我的回答呢


4) 您是否在painItems之后测试了toast。remove(i);这将显示项目是否真的被删除?或者在调用deleteCheckedItems()之后,显示新的painItems以查看是否一切正常

您是否调试了它,以查看您是否真的在
deleteChekedItems()中的for循环中进行了操作
?如果我在for循环之后添加一个toast,它会显示出来。我想这意味着我进入了for循环。1)Eclipse不允许我简单地将这一行放在方法之外。2)完成。3)对不起,我没有这样做,因为我的代码仍然没有删除该项。4)如果我在painitems之后添加toast。删除(I),它没有显示。这可能是什么原因?问题:2个原因:count==0或isCheckedItem始终为空…您可以测试吗?问题:1)您可以将适配器(和listView)作为参数传递:deleteCheckedItems(SimpleAdapter适配器,listView myListView),等等。不需要测试。我只是使用了LongClickListener而不是复选框…:P非常感谢您的帮助。