0

我有一个动态创建的 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;
}
4

2 回答 2

1

您为两个 TextView 添加相同的 ID

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

尝试为每个文本视图使用不同的 id。像这样 :

menu.add(0, 1, 0, "Edit n Replace");
menu.add(0, 2, 1, "Delete");
于 2012-10-09T07:44:14.333 回答
0

您应该需要监听 List Action onClick(View v) 事件,请参见示例。

//声明字符串全局变量 String result=null;

//点击contextmenu前onClick时获取TextView

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;
    }
于 2012-10-09T08:20:44.337 回答