且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

使用Android中的复选框从列表视图中删除多个项目

更新时间:2022-12-26 19:57:54

使用 SparseBooleanArray 获取选中的项,然后删除相同的项并刷新列表视图.

Use a SparseBooleanArray to get the checked items and then delete the same and refresh listview.

public class MainActivity extends Activity 
{
    ListView lv;
    ArrayAdapter<String> adapter;
    Button delete;
    ArrayList<String> data = new ArrayList<String>();
    SparseBooleanArray mCheckStates ;
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test);
        lv = (ListView)findViewById(R.id.listView1);
        lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
        delete = (Button)findViewById(R.id.button1);
        data.add("Windows");
        data.add("Android");
        data.add("Apple");
        data.add("Blackberry");
        adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_multiple_choice, data);
        lv.setAdapter(adapter);

        delete.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {

                SparseBooleanArray checked = lv.getCheckedItemPositions();
                for (int i = 0; i < lv.getCount(); i++){

                    if (checked.get(i)==true)
                    {
                         data.remove(i);

                    } 
                    adapter.notifyDataSetChanged(); 

                }
                 lv.clearChoices();               
            }
        });


    }
}

试试下面的

 delete.setOnClickListener(new OnClickListener()
    {
        @Override
        public void onClick(View v)
        {

             SparseBooleanArray checkedItemPositions = lv.getCheckedItemPositions();
             int itemCount = lv.getCount();

             for(int i=itemCount-1; i >= 0; i--){
                 if(checkedItemPositions.get(i)){
                     adapter.remove(data.get(i));
                 }
             }
             checkedItemPositions.clear();
             adapter.notifyDataSetChanged();

        }
    });