想要在单击Listview时删除特定行,但以下代码将删除所有行

时间:2016-03-25 10:52:35

标签: android

public class DisplayAdapter extends BaseAdapter {
Context mContext;
ArrayList<String> id;
ArrayList<String> firstName;
ArrayList<String> lastName;
public DisplayAdapter(Context c, ArrayList<String> id, ArrayList<String> fname, ArrayList<String> lname) {
    this.mContext = c;
    this.id = id;
    this.lastName = lname;
    this.firstName = fname;}
public int getCount() {
    // TODO Auto-generated method stub
    return id.size();
}
public Object getItem(int position) {
    // TODO Auto-generated method stub
    return null;}
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return 0;}
public View getView(int pos, View child, ViewGroup parent) {
    Holder mHolder;
    LayoutInflater layoutInflater;
    if (child == null) {
        layoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        child = layoutInflater.inflate(R.layout.text_layout, null);
        mHolder = new Holder();
        mHolder.txt_id = (TextView) child.findViewById(R.id.text2);
        mHolder.txt_fName = (TextView) child.findViewById(R.id.text3);
        mHolder.txt_lName = (TextView) child.findViewById(R.id.text4);
        child.setTag(mHolder);
    } else {mHolder = (Holder) child.getTag();
    }
    mHolder.txt_id.setText(id.get(pos));
    mHolder.txt_fName.setText(firstName.get(pos));
    mHolder.txt_lName.setText(lastName.get(pos));
    return child;}
    public class Holder {
    TextView txt_id;
    TextView txt_fName;
    TextView txt_lName;}
}

MydataBasse.java

public Integer deleteLaundry(String id)
    {  SQLiteDatabase db = this.getWritableDatabase();
        Integer deleteSuccessful;
        deleteSuccessful = db.delete(TABLE_NAME1, LAUNDRYCOL_1+"=" + id + "",null);
        db.close();
        return deleteSuccessful;
    }`public class Tab1_Admin extends Fragment {
    static Mydatabase md;
    private ArrayList<String> userId = new ArrayList<String>();
    private ArrayList<String> user_fName = new ArrayList<String>();
    private ArrayList<String> user_lName = new ArrayList<String>();
    List selection = new ArrayList();
    ListView lv;
    DisplayAdapter disadpt;
    SQLiteDatabase db1;
    int cnt;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        View v = inflater.inflate(R.layout.admin_frag_lay, container, false);
        md = new Mydatabase(getActivity());
        lv = (ListView) v.findViewById(R.id.list2);
        md = new Mydatabase(getActivity());
        show();
        return v;
    }

    public void show() {
        Cursor cur = AdminFragment.md.viewLaundry();
        if (cur.getCount() == -1) {
            Toast.makeText(getActivity(), "cursor is empty", Toast.LENGTH_SHORT).show();
        } else
            try {
                userId.clear();
                user_fName.clear();
                user_lName.clear();
                while (cur.moveToNext()) {
                    userId.add("NAME :-" + cur.getString(0) + "\n");
                    user_fName.add("CONTACT :- " + cur.getString(1) + "\n");
                    user_lName.add("ADDRESS:- " + cur.getString(2) + "\n");
                }
                disadpt = new DisplayAdapter(getActivity(), userId, user_fName, user_lName);
                lv.setAdapter(disadpt);
            } catch (Exception e) {
                e.printStackTrace();
            }
        lv.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE_MODAL);
        lv.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
            @Override
            public void onItemCheckedStateChanged(ActionMode mode, final int position, long arg2, boolean checked) {
                if (checked) {
                    selection.add(userId.get(position));
                    selection.add(user_fName.get(position));
                    selection.add(user_lName.get(position));
                    obj = selection.get(position);
                    cnt++;
                    mode.setTitle(cnt + "selected");
                } else {
                    selection.remove(userId.get(position));
                    selection.remove(user_fName.get(position));
                    selection.remove(user_lName.get(position));
                    cnt--;
                    mode.setTitle(cnt + "selected");}
            }
            @Override
            public boolean onCreateActionMode(ActionMode mode, Menu menu) {
                MenuInflater inflater = getActivity().getMenuInflater();
                inflater.inflate(R.menu.menu_two, menu);
                return true;}
            @Override
            public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
                return false;}
            @Override
            public boolean onActionItemClicked(ActionMode mode, MenuItem item) {

                if (item.getItemId() == R.id.del) {
                    try {

                        Integer deleteSuccessful = new Mydatabase(getActivity()).deleteLaundry(Mydatabase.LAUNDRYCOL_1);
                        if (deleteSuccessful == 1) {
                            Toast.makeText(getActivity(), "record was deleted.", Toast.LENGTH_SHORT).show();
                        } else {
                            Toast.makeText(getActivity(), "delete student record.", Toast.LENGTH_SHORT).show();
                        }
                        for (Object Item : selection) {
                            String value = Item.toString();
                            userId.remove(value);
                            user_fName.remove(value);
                            user_lName.remove(value);
                        }
                        disadpt.notifyDataSetChanged();
                        mode.finish();

                    } catch (Exception e) {
                        Log.e("Error", "" + e);
                    }
                }
                return true;}
            @Override
            public void onDestroyActionMode(ActionMode mode) {
                cnt = 0;
                selection.clear();
            }

2 个答案:

答案 0 :(得分:0)

以下是删除单行记录的示例示例

public ArrayList<PostModel> deletePost(int postId) {
    ArrayList<PostModel> postList = new ArrayList<PostModel>();

    String selectQuery = "Delete from " + TABLE_POST + " Where " + KEY_ID
            + "=" + postId;
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    if (cursor != null && cursor.getCount() > 0 && cursor.moveToFirst()) {
        do {
            // PostModel mPostModel = new PostModel();
            // mPostModel.setPost_desc(cursor.getString(cursor
            // .getColumnIndex(POST_TEXT)));
            // mPostModel.setPost_date(cursor.getString(cursor
            // .getColumnIndex(DATE)));
            // mPostModel.setPost_location(cursor.getString(cursor
            // .getColumnIndex(LOCATION)));
            // mPostModel.setPost_city(cursor.getString(cursor
            // .getColumnIndex(POST_CITY)));
            // mPostModel.setPost_img(cursor.getBlob(cursor
            // .getColumnIndex(POST_IMAGE)));
            // postList.add(mPostModel);

        } while (cursor.moveToNext());
    }
    return postList;
}

这是WHERE子句的简单示例,希望它对您有帮助。

答案 1 :(得分:0)

您是以MydataBasse.java编写的

deleteSuccessful = db.delete(TABLE_NAME1, LAUNDRYCOL_1+"=" + id + "",null);

使用

Tab1_Admin片段中删除

Integer deleteSuccessful = new Mydatabase(getActivity()).deleteLaundry(Mydatabase.LAUNDRYCOL_1);

最终查询变为

LAUNDRYCOL_1+"="+LAUNDRYCOL_1;

结果总是true

这就是背后的原因。

编辑:

使用默认ID创建表,该表是自动增量,如下面的

   db.execSQL("create table " + TABLE_NAME1 + "(_id INTEGER PRIMARY KEY   AUTOINCREMENT,NAME TEXT,CONTACT TEXT,ADDRESS TEXT)"); 

与该ID进行比较。