使用ContextMenu sqlite删除特定行

时间:2017-04-06 11:11:46

标签: android sqlite listview contextmenu

我有一个listView,它由我的sqlite数据库中插入的数据填充。

我创建了一个contextMenu,因此我可以从ListView中删除Items。

当我点击Delete时,我想从我的数据库和listView中删除该项。但我不能,我不知道为什么。但我希望通过获取Item I的字符串来删除它,因为它不适用于主键。

这是我的代码:

DatabaseHelper

 public void deleteCours(String cours)
{
    Open();
    db.execSQL("DELETE from "+TABLE_COURS+" WHERE "+COLONNE_COURS+"='"+cours+"'");
    db.close();
}

我的ListView和contextmenu

        //ce Listener permet de détecter si on clique sur un élément de la liste
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener()
    {

        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

            //récupération de l'ID
            long itemid= lv.getItemIdAtPosition(i);
            //conversion en int
            int id= (int)itemid;
            //conversion en string du cours que je selectionne
            String a =lv.getItemAtPosition(i).toString();
            dbhelper.deleteCours(a);
            //Intent pour naviguer de pag
            /*Intent b = new Intent(AffichageCours.this,AffichageNotes.class);
            //création d0un Bundle pour transférer des données
            Bundle args = new Bundle();
            args.putString("nom_cours",a);
            args.putInt("id",id);
            //insertion du Bundle dans l'Intent
            b.putExtras(args);
            //démarrage de l'intent
            startActivity(b);*/
        }

    });
}

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.context_menu,menu);

}

@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();

    switch(item.getItemId())
    {
        case R.id.supprimer:

            // I WANT TO DELETE HERE !
            return true;
        default:
            return super.onContextItemSelected(item);
    }
}

}

所以,我需要获取项目的字符串,以便我可以在我的方法中使用它。我想要自动刷新我的列表视图。

提前谢谢!如果您需要更多代码,请告诉我!

5 个答案:

答案 0 :(得分:1)

整改查询

public void deleteCours(int getID) {
    Open();
    db.execSQL("DELETE from Table_name WHERE fieldName='"+getID+"'");
    db.close();
}

FYI

如果您要从Listview中删除

adapter.remove(arrayList.get(position));  //Remove
adapter.notifyDataSetChanged();              //Refresh

答案 1 :(得分:0)

试试这种方式

    Object portletResponse = webAppAccess.getHttpServletRequest()
            .getAttribute(Constants.PORTLET_RESPONSE);

   if (portletResponse instanceof javax.portlet.ActionResponse) {
            javax.portlet.ActionResponse actionResponse = (javax.portlet.ActionResponse) portletResponse;

            actionResponse.sendRedirect(URL);
        }

答案 2 :(得分:0)

使用此选项删除特定行。

db.delete(TABLE_COURS, COLONNE_IDCOURS+ "=" + id, null);

答案 3 :(得分:0)

SQLiteDatabase应为getWritableDatabase()

试试这个:

public void deleteCours(int id)
{
    Open();

    db.delete(TABLE_COURS, COLONNE_IDCOURS + " = ?", new String[]{String.valueOf(id)});
    db.close();
}

答案 4 :(得分:0)

public void deleteCours(int id) {
    Open();
    String Query = "DELETE * FROM "+TABLE_COURS+" WHERE "+COLONNE_IDCOURS+"="+id;
    Cursor cursor = db.rawQuery(Query, null);

    // db.close();
    if (cursor.getCount() < 1) {
        Toast.makeText(context,"Delete Successfull",Toast.LENGTH_SHORT).show();
    } else {
        Toast.makeText(context,"Not Possible",Toast.LENGTH_SHORT).show();
    }
}

您可以检查您的数据是否正在删除..

如果不删除数据,则使用一些非主键字段..