0

嗨,我想检查所有 listview 项目并从数据库以及 listview 中删除这些项目。如果选择了所有 listview 项目并且只有一个 listitem 未选中,则必须删除选中的项目。为此我使用menu's.我怎么能这样实现?我正在使用以下代码:

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

3 回答 3

2

您只需要在适配器上调用 remove 方法,如下所示

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

不要忘记使其无效,以便它也影响列表。

adapter.notifyDatasetChanged()

编辑:-作为用户370305,您应该调用上述方法使其无效...

于 2012-08-08T10:33:42.330 回答
0

试试这个代码: -

主文件

<?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);
    }
}
于 2012-08-08T10:30:15.153 回答
0

您必须使用 db 的查询从 db 中删除对象,然后您应该创建新适配器或使用 remove() 方法对旧列表适配器

于 2012-08-08T10:30:24.920 回答