如何只从列表视图中删除选定的项目?
问题描述:
嗨,我想检查所有项目的listview.For我使用的菜单。
如果选择全部菜单,则必须选择所有数据。同样,如果我从菜单中选择删除,则必须删除列表视图的所有值。
我正确选择listview项目。但是,如果我取消选中任何复选框并选择删除,则会显示“请选择一个项目”。这是一个错误。
这意味着如果我选择所有项目,然后取消选中任何只有一个列表视图的项目,选中的值必须被删除。
我不知道该怎么做。如何只从列表视图中删除选定的项目?
如果有人知道,请帮助我。
代码:
1)定义的ArrayList:
private void CreateMenu(Menu menu) {
menu.setQwertyMode(true);
MenuItem mnu1 = menu.add(0, 0, 0, "Delete");
{
mnu1.setAlphabeticShortcut('a');
}
MenuItem mnu2 = menu.add(1, 1, 1, "Select All");
{
mnu2.setAlphabeticShortcut('s');
}
}
private boolean MenuChoice(MenuItem item) throws Exception {
switch (item.getItemId()) {
case 0:
if (getStrinValue != null) {
delhistory(getStrinValue);
} else {
Toast.makeText(getApplicationContext(),
"Please select an Item", Toast.LENGTH_SHORT).show();
}
case 1:
if(item.getTitle().equals("Select All")){
for(int i=0; i < lvhistory.getChildCount(); i++){
RelativeLayout itemLayout = (RelativeLayout)lvhistory.getChildAt(i);
final CheckBox cb = (CheckBox)itemLayout.findViewById(R.id.check);
cb.setChecked(true);
if (cb.isChecked() == true) {
getStrinValue = getStrinValue + ","
+ cb.getTag().toString();
}else{
getStrinValue = getStrinValue + ","
+ cb.getTag().toString();
}
}
}
}
return true;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
CreateMenu(menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
try {
return MenuChoice(item);
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
private class MyAdapter extends ResourceCursorAdapter {
public MyAdapter(Context context, Cursor cur) {
super(context, R.layout.dummy, cur);
}
@Override
public View newView(Context context, Cursor cur, ViewGroup parent) {
LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
return li.inflate(R.layout.dummy, parent, false);
}
@Override
public void bindView(View view, Context context, Cursor cur) {
TextView tvListText = (TextView) view.findViewById(R.id.Mobile);
chkBox = (CheckBox) view.findViewById(R.id.check);
tvListText.setText(cur.getString(cur
.getColumnIndex(MainscreenActivity.COL_Mobile)));
chkBox.setTag(cur.getString(cur
.getColumnIndex(MainscreenActivity.COL_Sent_id)));
chkBox.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
CheckBox cb = (CheckBox) v;
if (cb.isChecked() == true) {
getStrinValue = getStrinValue + ","
+ cb.getTag().toString();
} else {
getStrinValue = null;
}
}
});
}
}
public void delhistory(String getStrinValue) {
int pos1 = getStrinValue.indexOf(",");
if (pos1 > 0) {
String rowId = getStrinValue.substring(pos1 + 1);
String delimiter = "\\,";
String[] sentID = rowId.split(delimiter);
for (int i = 0; i < sentID.length; i++) {
String temp0 = sentID[i];
int id = Integer.parseInt(temp0);
MainscreenActivity.JEEMAAndroSMSDB
.delete(MainscreenActivity.Table_SentHistory, "_id="
+ id, null);
}
Toast.makeText(getApplicationContext(),
"History deleted successfully", Toast.LENGTH_SHORT)
.show();
finish();
Intent intent = new Intent(getApplicationContext(),
SentHistoryActivity.class);
startActivity(intent);
}
}
答
好最后我自己找到了答案。我将setonclicklistener添加到复选框中以删除未选中的值。答案如下:
private boolean MenuChoice(MenuItem item) throws Exception {
switch (item.getItemId()) {
case 0:
if (getStrinValue != null) {
delhistory(getStrinValue);
} else {
Toast.makeText(getApplicationContext(),
"Please select an Item", Toast.LENGTH_SHORT).show();
}
case 1:
if (item.getTitle().equals("Select All")) {
for (int i = 0; i < lvhistory.getChildCount(); i++) {
RelativeLayout itemLayout = (RelativeLayout) lvhistory
.getChildAt(i);
final CheckBox cb = (CheckBox) itemLayout
.findViewById(R.id.check);
cb.setChecked(true);
if (cb.isChecked() == true) {
getStrinValue = getStrinValue + ","
+ cb.getTag().toString();
System.out.println("CHECKEDIITTEEMSS-->>>"
+ getStrinValue);
}
cb.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
if (cb.isChecked() == false) {
getUnselected = cb.getTag().toString();
getStrinValue = getStrinValue.replace(","
+ getUnselected, "");
System.out.println("UNCHECKED--->>>"
+ getStrinValue);
} else if (cb.isChecked() == true) {
getStrinValue = getStrinValue + ","
+ cb.getTag().toString();
System.out.println("CHECKEDIITTEEMSS-->>>"
+ getStrinValue);
}
}
});
}
}
}
return false;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
CreateMenu(menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
try {
return MenuChoice(item);
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
private class MyAdapter extends ResourceCursorAdapter {
public MyAdapter(Context context, Cursor cur) {
super(context, R.layout.custom_sent_view, cur);
}
@Override
public View newView(Context context, Cursor cur, ViewGroup parent) {
LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
return li.inflate(R.layout.custom_sent_view, parent, false);
}
@Override
public void bindView(View view, Context context, Cursor cur) {
TextView tvListText = (TextView) view.findViewById(R.id.Mobile);
chkBox = (CheckBox) view.findViewById(R.id.check);
tvListText.setText(cur.getString(cur
.getColumnIndex(MainscreenActivity.COL_Mobile)));
chkBox.setTag(cur.getString(cur
.getColumnIndex(MainscreenActivity.COL_Sent_id)));
chkBox.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
CheckBox cb = (CheckBox) v;
if (cb.isChecked() == true) {
getStrinValue = getStrinValue + ","
+ cb.getTag().toString();
} else {
getStrinValue = null;
}
}
});
}
}
public void delhistory(String getStrinValue) {
int pos1 = getStrinValue.indexOf(",");
if (pos1 > 0) {
String rowId = getStrinValue.substring(pos1 + 1);
String delimiter = "\\,";
String[] sentID = rowId.split(delimiter);
for (int i = 0; i < sentID.length; i++) {
String temp0 = sentID[i];
int id = Integer.parseInt(temp0);
MainscreenActivity.JEEMAAndroSMSDB
.delete(MainscreenActivity.Table_SentHistory, "_id="
+ id, null);
}
Toast.makeText(getApplicationContext(),
"History deleted successfully", Toast.LENGTH_SHORT).show();
finish();
Intent intent = new Intent(getApplicationContext(),
SentHistoryActivity.class);
startActivity(intent);
}
}
非常感谢。
答
尝试下面的代码片段
public static ArrayList<String> item = new ArrayList<String>();
2)添加项是由:
item.add("string");
3)删除项目:
item.remove("string");
4)对于CheckAll /取消选中Alllogic:
cbk = (CheckBox) findViewById(R.id.selectAllList);
cbk.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(cbk.isChecked())
{
CheckBox cb = (CheckBox) v;
int itemCount = getListView().getCount();
for(int i=0 ; i < itemCount ; i++){
getListView().setItemChecked(i, cb.isChecked());
}
itemList.clear();
itemList.addAll(item);
if(item.size() != itemList.size())
{
cbk.setChecked(false);
}
}
else
{
CheckBox cbk = (CheckBox) v;
int itemCount = getListView().getCount();
for(int i=0 ; i < itemCount ; i++){
getListView().setItemChecked(i, cbk.isChecked());
}
itemList.clear();
}
}
});
答
这里是你必须遵循的一般路径。
- 从填充
ListView
的ArrayList
中删除该项目。 - 一旦做到这一点,你将不得不调用
notifyDataSetChanged()
的Adapter
正在使用的ListView
为什么你使用Menu ...这是非常简单的没有... – 2012-08-07 12:34:54
我们怎么能没有菜单? – Manikandan 2012-08-07 12:35:22
嗨user1498488,小小的评论什么是不是关于这个问题,但一些提示。 如果你想让你的评论被NilayOnAndroid注意到,那么开始你的评论:@NilayOnAndroid。这样他在收件箱中收到通知。 第二,你的接受比率有点低,人们会帮助你更快,当时更高。 请格式化你的问题一点(更容易阅读)我现在编辑它。 – Bigflow 2012-08-07 12:48:14