2012-10-09 29 views
0

我有一個爲其創建上下文菜單的動態創建的TextView的列表。但是,我的代碼返回第一個文本視圖的ID而不是單擊一個。getItemId返回列表中的第一個textview id而不是單擊的一個

public void onCreateContextMenu(ContextMenu menu, View v,ContextMenu.ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    // Create your context menu here 
    menu.setHeaderTitle("Context Menu"); 
    menu.add(0, v.getId(), 0, "Edit n Replace"); 
    menu.add(0, v.getId(), 1, "Delete"); 
} 
@Override 
public boolean onContextItemSelected(MenuItem item) { 
    // Call your function to preform for buttons pressed in a context menu 
    // can use item.getTitle() or similar to find out button pressed 
    // item.getItemID() will return the v.getID() that we passed before 
    super.onContextItemSelected(item); 

    if (item.getTitle().toString().equals("Delete")){ 
     NotesDatabase db =new NotesDatabase(this); 


     TextView tv = (TextView) findViewById(item.getItemId()); 
     db.searchAndDelete(tv.getText().toString()); 
    } 
    return true; 
} 
+0

你使用兩次v.getId()... – njzk2

回答

0

您應該需要監聽列表動作onClick(View v)事件請參閱示例。

//聲明字符串全局變量 String result = null;

//時的onClick點擊文本菜單之前

public void onClick(View v) 
{ 
    TextView tv = (TextView)v.findViewById(R.id.yourTextViewId); 
    result=tv.getText().toString(); 
} 



public boolean onContextItemSelected(MenuItem item) 
{ 

     super.onContextItemSelected(item); 

     if (item.getTitle().toString().equals("Delete")){ 
      NotesDatabase db =new NotesDatabase(this); 


      TextView tv = (TextView) findViewById(item.getItemId()); 
      db.searchAndDelete(result); 
     } 
     return true; 
    } 
+0

謝謝這個技巧的工作。 –

+0

哦不,不會在涉及上下文菜單時調用onClick –

+0

確定將它放入onCreateContextMenu而不是onClick –

1

你們兩個的TextView

menu.add(0, v.getId(), 0, "Edit n Replace"); 
menu.add(0, v.getId(), 1, "Delete"); 

嘗試用不同的ID對每個文本視圖中添加相同的ID。像這樣:

menu.add(0, 1, 0, "Edit n Replace"); 
menu.add(0, 2, 1, "Delete"); 
+0

這是爲了v.getId()註冊了相同的TextView的兩個菜單項獲得的TextView 。 –

+0

但是,這個相同的ID我想在onContextItemSelected –

相關問題