0

こんにちは、リストビューとデータベースでチェックされたアイテムを削除したいです。そのためにメニューを使用しています。メニューから削除が選択された場合、リストビューとデータベースで選択されたアイテムを削除します。すべて選択がクリックされた場合リストアイテムのすべてのチェックボックスをオンにしてから、リストビューからすべての値を削除し、データベース内のすべてのレコードを削除したいメニュー。次のコードを使用して、リストビューにデータベースからデータを入力します。知ってる人いたら教えてください。

コード:

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());                      
                }
            });
        }
    }
4

3 に答える 3

2

チェックされた項目を削除するには、CheckBox の 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.                
              }
   }
于 2012-08-03T08:12:50.380 に答える
0

わかりました、達成する方法の概要を説明します。これは私がアプリケーションのために行ったことです。

最初に、状態を維持するためのプロパティ (checked) を持つリスト項目のモデル クラスが必要です。次に、データベースから項目を取得するたびに、arraylist などの項目のリストを作成します。

次に、チェック ボックスがオンになるたびに、特定のリスト項目の状態プロパティを変更します。最後に、メニューから削除をクリックすると、3 つのステップがあります。

  1. 配列リストからチェックされたアイテムを取得する
  2. アダプターからアイテムを削除する
  3. データベースからアイテムを削除する

これは一理あると思います

編集

この以前のSOの質問を試しましたか? ところで、これはアダプターからアイテムを削除するのにのみ役立ちます。データベースからアイテムを削除する方法を見つける必要があります。

于 2012-08-03T09:20:36.930 に答える