如何只从列表视图中删除选定的项目?

问题描述:

嗨,我想检查所有项目的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); 
     } 
    } 
+0

为什么你使用Menu ...这是非常简单的没有... – 2012-08-07 12:34:54

+0

我们怎么能没有菜单? – Manikandan 2012-08-07 12:35:22

+3

嗨user1498488,小小的评论什么是不是关于这个问题,但一些提示。 如果你想让你的评论被NilayOnAndroid注意到,那么开始你的评论:@NilayOnAndroid。这样他在收件箱中收到通知。 第二,你的接受比率有点低,人们会帮助你更快,当时更高。 请格式化你的问题一点(更容易阅读)我现在编辑它。 – Bigflow 2012-08-07 12:48:14

好最后我自己找到了答案。我将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(); 

      } 
      } 
     }); 

这里是你必须遵循的一般路径。

  1. 从填充ListViewArrayList中删除该项目。
  2. 一旦做到这一点,你将不得不调用notifyDataSetChanged()Adapter正在使用的ListView