从Android中的可检查ListView中删除所有选定的项目

时间:2017-02-05 12:26:36

标签: java android listview

我在删除已检查的项目时遇到问题。 我已经尝试将它们设置为隐形,但它并没有完成这项工作。它只是使一些随机物品看不见 这是填充ListView的代码:

public void populate(){
        String [] result = getIntent().getStringExtra(EXTRA_RESULT).split(";");
        orderArray = new ArrayList<>(Arrays.asList(result));
        chl = (ListView) findViewById(R.id.checkableList);

        chl.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
        adapter = new ArrayAdapter<>(this, R.layout.rowlayout, R.id.txt_lan, orderArray);
        chl.setAdapter(adapter);
        chl.setOnItemClickListener(new AdapterView.OnItemClickListener(){

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                CheckedTextView ctv = (CheckedTextView) view;

                if(ctv.isChecked()){
                    selectedItemsPos.add(position);
                } 
                    selectedItemsPos.remove(position);
                }
            }
        });
    }

以下是我尝试删除这些项目的方法:

public void removeSelectedItems(MenuItem menuItem){
    for(int i=0; i<selectedItemsPos.size(); 
        orderArray.remove(selectedItemsPos.get(i));
    }
    adapter.notifyDataSetChanged();
}

2 个答案:

答案 0 :(得分:2)

再次调用setListAdapter()。这次是一个空的ArrayList。 它已在this页面上得到解答。

答案 1 :(得分:0)

使用SparseBooleanArray获取已检查的项目,然后删除相同的项目并刷新列表视图。

   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 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();

            }
            });
        }
    }