Reputation: 1473
I'm trying to open a context menu after long holding the a listview entry and displaying various options. However, I'm unable as long holding is not doing/invoking anything.
This the code that I'm using to invoke the context menu:
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuItem delete = menu.add("delete");
MenuItem edit = menu.add("edit");
delete.setOnMenuItemClickListener(new OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
return true;
}
});
edit.setOnMenuItemClickListener(new OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
return true;
}
});
}
I have also tried, but to no avail either:
@Override
public void onCreateContextMenu(ContextMenu menu,
View v, ContextMenuInfo menuInfo) {
menu.add(0, 1, 0, "Edit");
menu.add(0, 2, 1, "Rename");
menu.add(0, 3, 2, "Delete");
super.onCreateContextMenu(menu, v, menuInfo);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
super.onContextItemSelected(item);
if(item.getTitle().equals("Edit")) {
//Edit code
} else if(item.getTitle().equals("Rename")) {
//Rename code
} else if(item.getTitle().equals("Delete")) {
//Delete code
}
return true;
};
MainActivity code (only relevant parts):
public class MainActivity extends Activity {
private List<CountElement> myElements = new ArrayList<CountElement>();
ListView list;
ArrayAdapter<CountElement> adapter;
/*
Users enters needed listview items, code not shown here. It works fine however -
all needed elements are displayed correctly.
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
adapter = new MyListAdapter();
list = (ListView) findViewById(R.id.listView1);
list.setAdapter(adapter);
registerForContextMenu(list);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuItem delete = menu.add("delete");
MenuItem edit = menu.add("edit");
delete.setOnMenuItemClickListener(new OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
return true;
}
});
edit.setOnMenuItemClickListener(new OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
return true;
}
});
}
private class MyListAdapter extends ArrayAdapter<CountElement> {
//Custom adapter code here
}
}
Any help is greatly appreciated. Thank you!
Upvotes: 3
Views: 4004
Reputation: 1473
Alright, I was able to figure it out. In my custom listAdapter, I added a setOnItemLongClickListener on the listView. This setOnItemLongClickListener has an alert displayed with my needed options. As so:
list.setOnItemLongClickListener(new OnItemLongClickListener() { //list is my listView
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
final int pos, long id) {
//Whatever you wanna do
}
});
Upvotes: 5
Reputation: 471
See this http://developer.android.com/guide/topics/ui/menus.html#context-menu. You have to create your own menu in the menu folder and after that you have to inflate it in the method onCreateContextMenu().
Upvotes: 0