2012-08-03 88 views
0

您好我想從列表視圖和database.Iam中使用菜單中刪除選中的項目。如果從菜單中選擇刪除,那麼我想從選擇的項目中刪除列表視圖和在數據庫中。如果選擇全部被單擊菜單中我想設置列表項的所有複選框檢查,然後刪除所有值從列表視圖,並刪除數據庫中的所有記錄。使用下面的代碼使用複選框在列表視圖中填充數據庫中的數據。如果有人知道,請幫助我。如何從列表視圖和數據庫中刪除選中的項目

代碼:

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.senthistory);    
     lvhistory = (ListView) findViewById(android.R.id.list);  
     PopulateSentList();    
    } 

    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('D'); 
     } 
     MenuItem mnu2 = menu.add(0, 0, 0, "Select All"); 
     { 
      mnu2.setAlphabeticShortcut('S'); 
     } 
    } 

    private boolean MenuChoice(MenuItem item) throws Exception { 
     switch (item.getItemId()) { 
     case 0: 
      int count = (int) getListAdapter().getCount(); 
      for (int i = 1; i <= count; i++) { 
       if (this.lvhistory.isItemChecked(i)) { 
        listItems.remove(i); 
        adapter.notifyDataSetChanged(); 
        MainscreenActivity.JEEMAAndroSMSDB.delete(
          MainscreenActivity.Table_SentHistory, "_id=" +i, null); 
        finish(); 
        Intent intent = new Intent(getApplicationContext(), 
          SentHistoryActivity.class); 
        startActivity(intent); 
       } 
      } 

      return true; 
     } 
     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.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); 
      final CheckBox 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.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

       @Override 
       public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
        // TODO Auto-generated method stub 
        Log.v("Checked", chkBox.getTag().toString());      
       } 
      }); 
     } 
    } 

回答

2

對於刪除選中的項目,你可以使用複選框器isChecked()方法。在你的代碼中,你可以按以下方式使用。

chkBox.setOnClickListener(new new OnClickListener() {    
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub    
      CheckBox cb = (CheckBox)v; 

      if(cb.isChecked() == true) 
      { 
        String getStrinValue = cb.getTExt().toString(); // here you will get the value of selected CheckBox 
        // And now you have to perform your deletion operation as usual.     
       } 
    } 
+0

我想刪除它通過選擇從menu.How刪除可我不喜歡that.Iam新android.Please幫助我以這樣的方式選擇的數據。 – Manikandan 2012-08-03 08:18:12

+0

@ user1498488我在我的帖子中做了一些改變,請找到它。好運:) – Akshay 2012-08-03 08:25:55

+0

對不起,說akshay,我不知道如何進一步刪除選擇的項目,通過選擇刪除菜單。如果你有空閒時間意味着請指導我這樣做。 – Manikandan 2012-08-03 08:33:09

0

好吧,我將給出一個如何完成的概述。這是我爲我的應用程序做的。

首先,您需要爲具有維護狀態(已選中)的屬性的列表項設置模型類,然後每當您從數據庫獲取項目時創建項目列表(如arraylist)。

然後,只要複選框被選中,就會更改特定列表項的狀態屬性。最後,當您單擊從菜單中刪除,將有三個步驟

  1. 獲取從ArrayList中的檢查項目
  2. 從適配器刪除項目
  3. 從數據庫中刪除項目

我認爲這是有道理的

編輯

您是否嘗試過this以前的SO問題?順便說一句,這隻會幫助從適配器中刪除項目。您必須找到一種方法來從數據庫中刪除項目。

+0

你可以解釋一個代碼。因爲iam新的android。 – Manikandan 2012-08-03 09:58:02

0

下面是我做的。我發現這是最簡單的解決方案,以便始終匹配正確的ID。因爲適配器和光標將始終具有相同的計數和位置。兩者的起始索引都爲0.

這就是我的菜單項的情況。 我還添加了一個警告對話框作爲安全步驟。

if (mListView.getCount() == 0 || mListView.getCheckedItemCount() == 0) { 
     Toast.makeText(this, "Select an item by holding", Toast.LENGTH_SHORT).show(); 
     return false; 
    } 
    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 
    builder.setMessage("Are you sure you want to delete these items?"); 
    builder.setCancelable(true); 

    builder.setPositiveButton(
     "Yes", 
     new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       SparseBooleanArray selection = mListView.getCheckedItemPositions(); 
       Cursor data = mDBHandler.getAllIDs(); // "SELECT " + COLUMN_ID + " FROM " + TABLE_NAME; 
       int itemID; 
       int itemCount = arrayAdapter.getCount(); 
       for (int i=itemCount-1; i >= 0; i--) { 
        if (selection.get(i)) { 
         data.moveToPosition(i); 
         itemID = data.getInt(data.getColumnIndexOrThrow("id")); // COLUMN_ID = "id" 
         mDBHandler.deleteItem(itemID); 
        } 
       } 
       selection.clear(); 
       updateListView(); 
       dialog.cancel(); 
      } 
     }); 

    builder.setNegativeButton(
     "No", 
     new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       dialog.cancel(); 
      } 
    }); 

    AlertDialog alertDelete = builder.create(); 
    alertDelete.show(); 
    return true; 


public void updateListView() { 
    mListView.setAdapter(arrayAdapter); 
    Cursor data = mDBHandler.getItems(); 
    arrayList.clear(); 
    while (data.moveToNext()) { 
     arrayList.add(data.getString(1)); 
    } 
    arrayAdapter.notifyDataSetChanged(); 
} 
相關問題