2

こんにちは、リストビューのすべての項目をチェックしたいのですが、そのためにメニューを使用しています。
[すべて選択] メニューを選択すると、すべてのデータを選択する必要があります。メニューから削除を選択すると、リストビューのすべての値を削除する必要があります。
リストビュー項目を正しく選択しています。しかし、チェックボックスのいずれかをオフにして削除を選択すると、「項目を選択してください」と表示されます。バグです。
つまり、すべての項目を選択してから、リストビューの項目を 1 つだけオフにすると、チェックされた値を削除する必要があります。
やり方がわかりません。

知ってる人いたら教えてください。

コード:

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

3 に答える 3

0

次のコードを試してください。

1) ArrayList を定義します。

public static ArrayList<String> item = new ArrayList<String>();

2)次の方法で項目を追加します。

item.add("string");

3)次の方法でアイテムを削除します。

item.remove("string");

4)CheckAll/Uncheck 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();

            }
            }
        });
于 2012-08-07T12:44:25.093 に答える
0

以下は、従わなければならない一般的なパスです。

  1. に取り込まれている から項目を削除しArrayListますListView
  2. それが完了したら、使用されてnotifyDataSetChanged()いるを呼び出す必要があります。AdapterListView
于 2012-08-07T12:45:49.710 に答える
0

最後に、私は自分で答えを見つけました。チェックボックスに 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);
        }
    }

どうもありがとうございます。

于 2012-08-09T12:50:49.940 に答える