2012-01-17 5 views
0

私はこれを動作させることができません。私は多くの投稿を見てきました。そして、明後日までこれを終了しなければならないので、本当に絶望的です。問題は次のとおりです。contextMenuから選択した項目のIDは常に0です

私はデータベースのエントリを持つlistViewを持っています。コンテキストメニューを呼び出すには、それらを長時間クリックすることができます。コンテキストメニューでは、エントリを削除または編集することができます。これを行うには、選択したアイテムのIDが必要です。

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

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
    int id = (int) info.id; 
    switch (item.getItemId()) { 
    case R.id.edit_grade: 
    Intent i = new Intent(this, AddGradeActivity.class); 
    i.putExtra(GradesDbAdapter.KEY_ROWID, linkSubject); 

    // putExtra edit, so addGradeActivity knows it has to fill views with values to edit grade 
    i.putExtra("edit", true); 
    i.putExtra(GradesDbAdapter.KEY_GRADE, id); 
    this.startActivity(i); 
    finish(); 

    return true; 
    case R.id.del_grade: 
     myDbHelper.deleteGradeEntry(id, semester); 
     // filldata to refresh listview 
     fillData(); 
    return true; 
    default: 
    return super.onContextItemSelected(item); 
    } 
} 

今私の問題は、私は情報から取得し、このIDはいつも私がレイアウトを変更する前に、それが働いているので、それは本当に奇妙だ0であるということです、私は、同じ画面上の2つのタブで実行されているこの同じ活性を有しています。これが理由だろうか?

+0

item.getItemId()が間違った値を返しますか?またはitem.id?このリンクメイトhttp://stackoverflow.com/questions/2453620/android-how-to-find-the-position-clicked-from-the-context-menuを確認していない –

+0

info.idを()は0を返し、関係なく、どの私が選んだエントリー。 –

+0

はあなたが –

答えて

2

私は同じ問題を抱えていました。 ListViewを実装したコンテキストメニュー/クラスではなく、データベーステーブル_idカラムの作成時に発生しました。この構文を使用する場合:この構文が使用されている場合

db.execSQL("CREATE TABLE TABLE_NAME(_id INTEGER AUTO INCREMENT PRIMARY KEY, TITLE TEXT, VALUE REAL);"); 

AdapterView.AdapterContextMenuInfo.idは常に、しかし0

返します

db.execSQL("CREATE TABLE TABLE_NAME(_id INTEGER PRIMARY KEY AUTOINCREMENT, TITLE TEXT, VALUE REAL);"); 

AdapterView.AdapterContextMenuInfo.id

は常に正しいIDを返します。

だから、違いがあります:

_id INTEGER AUTO INCREMENT PRIMARY KEY 

_id INTEGER PRIMARY KEY AUTOINCREMENT 

二作品は、まずありません。デバッグが難しいのは、どちらも構文的に正しいということです。

もう一つ重要なことは、1つのデータベースがすでに存在する場合はトリガーされませんSQLiteOpenHelperを拡張するクラスのonCreate方法以来、再びアプリを再実行する前に、ADB端子を介してアプリケーションからデータベースオブジェクトを削除する必要があるということである - それはdoesnの場合にのみトリガしたがって、訂正後にデータベースを削除してから、アプリケーションを再実行することが重要です。

私は役立つことを願っています。