我是android的新手,我在我的代码中使用了ListView。我的代码如下:
import java.util.ArrayList;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.util.SparseBooleanArray;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
import android.content.DialogInterface;
@SuppressLint("NewApi")
public class MainActivity extends Activity
{
int counter;
ListView listView;
ArrayAdapter <String> adapter;
Button btnAddAgain, btnDeleteSelected;
ArrayList <String>listItems=new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
counter=0;
listView=(ListView) findViewById(R.id.myList);
adapter= new ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice,listItems);
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
listView.setAdapter(adapter);
btnAddAgain=(Button) findViewById(R.id.addAgain);
btnAddAgain.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View arg0)
{
listItems.add("Clicked " +counter++);
adapter.notifyDataSetChanged();
}
});
btnDeleteSelected=(Button) findViewById(R.id.btnDelete);
btnDeleteSelected.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View arg0)
{
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setMessage("Delete?");
builder.setTitle("Confirm Action");
builder.setPositiveButton("Delete", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int id)
{
SparseBooleanArray checked = listView.getCheckedItemPositions();
for (int i = 0; i < listItems.size(); i++)
{
if (checked.get(i)==true)
{
listItems.remove(i);
adapter.notifyDataSetChanged();
}
}
//checked.clear();
}
});
builder.setNegativeButton("Cancel", null);
builder.create();
builder.show();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
但删除按钮只删除ListView的第一个元素。有人请帮帮我。我正在尝试自己学习android。你的帮助对我学习android非常有益。我在代码中做了哪些更改,以从列表中删除已检查的项目。谢谢你们
答案 0 :(得分:0)
如果我没记错的话,当你使用.get()时,getCheckedItemPositions()会为所有值返回false。 你想要使用的是checked.valueAt(i)== true 请看SparseBooleanArray
在你的情况下填充SparseBooleanArray的方式似乎没有键,这意味着你的所有.get(key)都将返回false,因为它无法找到该项。相反,您应该只使用valueAt(int index),因为您可以使用索引来查找哪些项是真的。
因此,您的代码应如下所示:
for (int i = 0; i < listItems.size(); i++)
{
if (checked.valueAt(i)==true)
{
listItems.remove(i);
adapter.notifyDataSetChanged();
}
}
答案 1 :(得分:0)
listView.getCheckedItemPositions();
仅返回已检查的位置
试试此代码
SparseBooleanArray checked = listView.getCheckedItemPositions();
int min = 0;
for(int i=0; i<checked.size();i++){
int pos = checked.keyAt(i);
listItems.remove(pos - min);
min++;
}
adapter.notifyDataSetChanged();
希望这有助于你;
答案 2 :(得分:0)
试试这个
public void onClick(DialogInterface dialog, int id)
{
SparseBooleanArray checked = listView.getCheckedItemPositions();
int size = listItems.size() - 1;
for (int i = size; i > -1; i--)
{
if (checked.get(i))
{
listItems.remove(i);
}
}
adapter.notifyDataSetChanged();
//checked.clear();
}
});