gpt4 book ai didi

android - 在 Android 中使用复选框从 ListView 中删除多个项目

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:26:52 24 4
gpt4 key购买 nike

您好,我无法使用复选框从 ListView 中删除多个项目。我可以从 ListView 中选择多个项目,但只有第一个被选中的项目被删除,而其他项目没有被删除。这是我的代码。提前致谢!

public class MainActivity extends Activity 
{
ListView lv;
ArrayAdapter<String> adapter;
Button delete;
ArrayList<String> data = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView)findViewById(R.id.listView1);
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)
{
deleteCheckedItems();
adapter.notifyDataSetChanged();
}
});


}

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
private void deleteCheckedItems() {
int count = adapter.getCount();

for (int i = 0; i < count; i++)
{
if (lv.isItemChecked(i))
{
data.remove(i);
}
}
}

}

最佳答案

使用 SparseBooleanArray 获取选中的项目,然后删除相同的项目并刷新 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();

}
});

关于android - 在 Android 中使用复选框从 ListView 中删除多个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18715556/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com