【问题标题】:Deleting and Updating values from a cusrsor adapter从光标适配器中删除和更新值
【发布时间】:2015-08-23 19:10:53
【问题描述】:

我是 android 开发的新手,我已经使用光标适配器将值填充到列表视图中。我正在尝试使用列表视图删除和更新值,但我不确定如何使用游标适配器完成此操作。我也无法单击列表视图项

我在我的数据库处理程序类中使用以下方法来删除和更新值

删除方法

 public void DeletingCustodian(Custodians custodians)
    {
        SQLiteDatabase db_database = getWritableDatabase();
        //Deleting the custodian from the Database where the custodian ID matches to the selcted ID
        db_database.delete(TABLE_CUSTODIAN,CUSTODIAN_ID + "=?" , new String[]{String.valueOf(custodians.getCust_id())});
        db_database.close();
    }

更新方法

public  int updateCustodian(Custodians cust)
    {
        SQLiteDatabase db_database = getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(CUSTODIAN_NAME,cust.getCust_Name());
        values.put(CUSTODIAN_DESIGNATION,cust.getCust_Design());
        values.put(CUSTODIAN_DEPARTMENT,cust.getDepartment());

        int roweffected = db_database.update(TABLE_CUSTODIAN,values,CUSTODIAN_ID + "=?", new String[]{String.valueOf(cust.getCust_id())});
        db_database.close();
        return roweffected;
    }

我已创建一个上下文菜单,显示编辑并删除,显示某个项目时显示了某个项目。

 public void onCreateContxtManu(ContextMenu menu,View view, ContextMenu.ContextMenuInfo menuInfo)
    {
        super.onCreateContextMenu(menu,view,menuInfo);

        menu.setHeaderTitle("Custodian Options");
        menu.add(Menu.NONE,EDIT,menu.NONE,"Edit Custodian");
        menu.add(Menu.NONE,DELETE,menu.NONE,"Delete Custodian");
    }

 public void deletingitemsfromlist()
    {
        CustodianListview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {

                return false;
            }
        });

    }
   public boolean onContextItemSelected(MenuItem item)
    {
        switch(item.getItemId())
        {
            case EDIT:


                break;
            case DELETE:


                break;
        }

        return false;
    }

【问题讨论】:

    标签: android sqlite cursor android-cursoradapter


    【解决方案1】:

    试试这个,可能对你有帮助

    删除数据库连接器中的代码

    // Delete a row in Local database
        public void delete(int ids) {
    
            database.delete(TABLE_NAME, KEY_ROWID + " = " + ids, null);
        }
    

    在您的Listview页面代码Onitem长按删除

    @Override
                   public boolean onItemLongClick(AdapterView arg0, View v,
                     int position, long arg3)
                 {
                     try
                     {
    
                    TextView id = (TextView) v.findViewById(R.id.textView4);
    
                     ids1 = Integer.parseInt(id.getText().toString());
                    AlertDialog.Builder ad = new AlertDialog.Builder(Page1_Landing.this);
                    //ad.setTitle("Notice");
                    ad.setMessage("Sure you want to delete this Item ?");
    
                    //Delete Positive Button
                    ad.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() 
                    {
    
    
                    @SuppressWarnings("deprecation")
                    @Override
                     public void onClick(DialogInterface dialog, int which)
                     {
                         try
                         {
    
    
    
                              //Delete of record from Database and List view.
                              helper.delete(ids1);
                              cur.requery();
                              myCursorAdap.notifyDataSetChanged();
                              List.setAdapter(myCursorAdap);
                              Toast.makeText(Page1_Landing.this,"Selected Product is Successfully Deleted...!", Toast.LENGTH_SHORT).show();
    
    
    
                         }
                         catch(Exception e)
                         {
                             e.printStackTrace();
                               Log.i("Exception ", "in Delete a Product");
                         }
                     }
                    });
    
                    //long press delete cancel
                    ad.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() 
                    {
    
                     @Override
                     public void onClick(DialogInterface dialog, int which) 
                     {
    
    
                         dialog.dismiss();
    
    
                     }
                    });
                    ad.show();
    
    
    
                     }
                     catch(Exception e)
                     {
                         e.printStackTrace();
                     }
                     return true;
                   }
    

    更新代码

    DatabaseConnector helper = new DatabaseConnector(this);
    
    helper.open();
    
    helper.updatedetails(rowID,name1,desc, dept);
    Toast.makeText(getApplicationContext(),"Updated Successfully...!", Toast.LENGTH_SHORT).show();
    

    更新数据库代码

    // updating the data ....
        public boolean updatedetails(long rowId, String name,
                String desc, String dept)
        {
            ContentValues args = new ContentValues();
    
            args.put(KEY_ROWID, rowId);
            args.put(KEY_NAME, product);
            args.put(KEY_DESC, cat);
            args.put(KEY_DEPT, serial);
    
    
    
            return database.update(TABLE_NAME, args, KEY_ROWID + "=" + rowId, null) > 0;
        }
    

    【讨论】:

    • 我确实尝试了您的步骤,但我遇到了一些小问题。问题是我已经在列表视图页面中声明了我的光标适配器类来填充列表视图。
    • Thankx Mano 你的步骤有效。但是我得到了一个空点异常,因为我使用了我在问题中提到的相同更新方法,但我没有使用整数,而是使用了 void 你能不能让我知道如何解决更新问题
    【解决方案2】:

    更新数据库中的数据,再次查询数据库得到新的游标,然后调用

    oldCursor = myCursorAdapter.swapCursor(newCursor); // hands you back oldCursor
    

    或:

    myCursorAdapter.changeCursor(newCursor); // automatically closes old Cursor
    

    myCursorAdapter.notifyDataSetChanged() 通知ListView 数据集发生了变化,它应该自己刷新

    【讨论】:

    • 对不起,我不知道该怎么做,但现在我尝试从列表视图中获取删除项。
    • 简单修改你的数据库,然后在数据库中查询新数据并调用上述方法。
    猜你喜欢
    • 1970-01-01
    • 2022-01-02
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    • 2021-10-17
    相关资源
    最近更新 更多