我在删除已检查的项目时遇到问题。 我已经尝试将它们设置为隐形,但它并没有完成这项工作。它只是使一些随机物品看不见 这是填充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();
}
答案 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();
}
});
}
}