2011-08-17 17 views
0

タイトルが言うように、私は長く押してデータベースからリスト内のアイテムを削除するオプションを持っているリストを持っています。私がコードを実行すると、何も起こりませんし、 "フォーカスを無視してウィンドウがすでにフォーカスされている"という警告が表示されます。アンドロイド - コンテキストメニューを使用してデータベースからアイテムを削除

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


@Override 
public boolean onContextItemSelected(MenuItem item) { 
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
    switch (item.getItemId()) { 
    case R.id.remove: 
     System.out.println(sindex); 

     db.open(); 
     db.deleteIP(info.position); //deleteIP is the method to delete item from list 
     db.close(); 



     return true; 
    default: 
    return super.onContextItemSelected(item); 
    } 
} 

deleteIP() - -

public boolean deleteIP(long _id) 
{ 
    return db.delete(DATABASE_TABLE, KEY_ID + "=" + _id, null) > 0; 
} 

あるdb.deleteIP(info.position)が問題を作成し、ここで は、コードスニペットがありますか? もう1つのオプションを試しました。リスト項目のインデックスをsindexに保存しました。だからdb.deleteIP(sindex)を呼び出すと効果があったはずです。しかしそれはdoesnt!

助けてください!おかげさまで

+0

データがdbから削除されたかどうかを確認しましたか?しかし、あなたはアダプタをリフレッシュしませんでした – Selvin

+0

データが削除されたかどうかチェックする必要がありますか? – Umang

+0

あなた自身のコードを理解できないのですか? deleteIPが返すものを確認するか、行がまだそこにあるかどうかを確認するためにアプリケーションを再実行してください。 – Selvin

答えて

0

info.positionを参照しているため、プライマリキーとして使用しようとしていますが、これはおそらく正しくありません。 CursorAdapterを使用している場合、info.idにはCursor_IDの値が含まれます。

+0

ArrayAdapterの場合、解決策は何ですか? – Mikey

+0

@mikdedroid: 'info.position'の値は配列へのインデックスです。 – CommonsWare

+0

私は、あなたが_IDを取得するためにCursorAdapterを使用すると言いましたが、もしそれがArrayAdapterならどうですか? – Mikey

関連する問題