2012-08-08 91 views
0

嗨,我想檢查所有列表視圖項目,並從數據庫以及從列表視圖中刪除這些項目。如果所有列表視圖項目被選中,並且任何只有一個列表項目未選中,那麼檢查的項目有被刪除。對於這個iam使用菜單。我可以如何實現?使用蔭下面的代碼:如何刪除列表視圖項目

public void PopulateSentList() { 
     String strquery = "SELECT * FROM sent_history"; 
     Cursor Cursor = (MainscreenActivity.JEEMAAndroSMSDB).rawQuery(strquery, 
       null); 
     MyAdapter adapter = new MyAdapter(SentHistoryActivity.this, Cursor); 
     setListAdapter(adapter);   
     lvhistory.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, 
        int position, long arg3) { 
       // TODO Auto-generated method stub 
       SQLiteCursor selectedValue = (SQLiteCursor) getListAdapter() 
         .getItem(position); 
       String id1 = selectedValue.getString(0); 
       System.out.println("DATA-->>>" + id1); 
       Intent intent = new Intent(getApplicationContext(), 
         Historydisplay.class); 
       intent.putExtra("Id", id1); 
       final int result = 1; 
       startActivityForResult(intent, result); 
      } 
     }); 
    } 

    public void onBackPressed() { 
     super.onBackPressed(); 
     Intent intent = new Intent(SentHistoryActivity.this, 
       MainscreenActivity.class); 
     startActivity(intent); 
     finish(); 
    } 

    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(); 
        } 
        cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {      
         @Override 
         public void onCheckedChanged(CompoundButton arg0, boolean arg1) { 
          // TODO Auto-generated method stub   
          final long[] checkedIds = lvhistory.getCheckItemIds(); 
          for (int i = 0; i < checkedIds.length; i++) { 
           Log.e("checkedIds", "id checked: " + checkedIds[i]); 
          } 
          }      
        });     
       }    
      } 

     } 
     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

試試這個代碼: -

main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <EditText 
     android:id="@+id/txtItem" 
     android:layout_width="240dp" 
     android:layout_height="wrap_content" 
     android:inputType="text" 
     android:hint="@string/hintTxtItem"   
     /> 

    <Button 
     android:id="@+id/btnAdd" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/lblBtnAdd" 
     android:layout_toRightOf="@id/txtItem" 
     /> 

    <TextView 
     android:id="@android:id/empty" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/txtItem" 
     android:text="@string/txtEmpty" 
     android:gravity="center_horizontal"   
     /> 

    <ListView 
     android:id="@android:id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"   
     android:layout_below="@id/txtItem" 
     android:choiceMode="multipleChoice" > 
    </ListView> 

    <Button 
     android:id="@+id/btnDel" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"   
     android:layout_alignParentBottom="true" 
     android:text="@string/lblBtnDel" /> 


</RelativeLayout> 

MainActivity.java

public class MainActivity extends ListActivity { 

    /** Items entered by the user is stored in this ArrayList variable */ 
    ArrayList<String> list = new ArrayList<String>(); 

    /** Declaring an ArrayAdapter to set items to ListView */ 
    ArrayAdapter<String> adapter; 


    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 

     /** Setting a custom layout for the list activity */ 
     setContentView(R.layout.main); 

     /** Reference to the add button of the layout main.xml */ 
     Button btn = (Button) findViewById(R.id.btnAdd); 

     /** Reference to the delete button of the layout main.xml */ 
     Button btnDel = (Button) findViewById(R.id.btnDel); 

     /** Defining the ArrayAdapter to set items to ListView */ 
     adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, list); 

     /** Defining a click event listener for the button "Add" */ 
     OnClickListener listener = new OnClickListener() { 
         @Override 
         public void onClick(View v) { 
           EditText edit = (EditText) findViewById(R.id.txtItem); 
           list.add(edit.getText().toString()); 
           edit.setText(""); 
           adapter.notifyDataSetChanged(); 
         } 
       }; 

     /** Defining a click event listener for the button "Delete" */ 
     OnClickListener listenerDel = new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       /** Getting the checked items from the listview */ 
       SparseBooleanArray checkedItemPositions = getListView().getCheckedItemPositions(); 
       int itemCount = getListView().getCount(); 

       for(int i=itemCount-1; i >= 0; i--){ 
        if(checkedItemPositions.get(i)){       
         adapter.remove(list.get(i)); 
        } 
       }    
       adapter.notifyDataSetChanged();    
      } 
     };    

     /** Setting the event listener for the add button */ 
     btn.setOnClickListener(listener); 

     /** Setting the event listener for the delete button */ 
     btnDel.setOnClickListener(listenerDel);  

     /** Setting the adapter to the ListView */ 
     setListAdapter(adapter); 
    } 
} 
0

您必須從數據庫使用數據庫的查詢都刪除對象,那麼您應該創建新的適配器或使用remove()方法,以舊列表適配器

2

你只需要調用適配器去除方法,如下面

adapter.remove(list.get(i)); 

不要忘記使其無效,以便它也影響列表。

adapter.notifyDatasetChanged() 

編輯: - 與參數user370305你應該calll上述方法無效它...

+1

這是'adapter.notifyDatasetChanged()'。 – user370305 2012-08-08 10:40:17

+1

謝謝,我只是沒有得到方法的名稱。編輯我的答案.. :) – AAnkit 2012-08-08 11:41:18