I want to add a Dialog with 2 buttons edit and remove(only remove implemented actually) when I use longClick (the standard click opens the item details)
so I have tried to follow the guide on this link
and I have added
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.layout.edit_dialog, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
.getMenuInfo();
switch (item.getItemId()) {
case R.id.remove_item:
final String[] listItem = getItemId();
String idItemSel = listItem[info.position];
delItem(idItemSel);
adapter.notifyDataSetChanged();
return true;
}
return false;
}
(where adapter is my list adapter)
and I have configured the listener in this way
list.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
.....
}
});
list.setOnItemLongClickListener(new OnItemLongClickListener() {
public boolean onItemLongClick(AdapterView<?> parent, View view,
int position, long id) {
view.showContextMenu();
return true;
}
});
All works fine but when I use long click the app crash with this error (on invocation of view.showContextMenu();) :
08-02 18:13:12.079: E/AndroidRuntime(7780): FATAL EXCEPTION: main
08-02 18:13:12.079: E/AndroidRuntime(7780): java.lang.StackOverflowError
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:1995)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.view.View.showContextMenu(View.java:2520)
08-02 18:13:12.079: E/AndroidRuntime(7780): at detailer.myapp.it.MyItems$6.onItemLongClick(MyItems.java:615)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:2001)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.view.View.showContextMenu(View.java:2520)
08-02 18:13:12.079: E/AndroidRuntime(7780): at detailer.myapp.it.MyItems$6.onItemLongClick(MyItems.java:615)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:2001)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.view.View.showContextMenu(View.java:2520)
08-02 18:13:12.079: E/AndroidRuntime(7780): at detailer.myapp.it.MyItems$6.onItemLongClick(MyItems.java:615)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:2001)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.view.View.showContextMenu(View.java:2520)
08-02 18:13:12.079: E/AndroidRuntime(7780): at detailer.myapp.it.MyItems$6.onItemLongClick(MyItems.java:615)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:2001)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.view.View.showContextMenu(View.java:2520)
08-02 18:13:12.079: E/AndroidRuntime(7780): at detailer.myapp.it.MyItems$6.onItemLongClick(MyItems.java:615)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:2001)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.view.View.showContextMenu(View.java:2520)
08-02 18:13:12.079: E/AndroidRuntime(7780): at detailer.myapp.it.MyItems$6.onItemLongClick(MyItems.java:615)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:2001)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.view.View.showContextMenu(View.java:2520)
08-02 18:13:12.079: E/AndroidRuntime(7780): at detailer.myapp.it.MyItems$6.onItemLongClick(MyItems.java:615)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:2001)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.view.View.showContextMenu(View.java:2520)
08-02 18:13:12.079: E/AndroidRuntime(7780): at detailer.myapp.it.MyItems$6.onItemLongClick(MyItems.java:615)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:2001)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.view.View.showContextMenu(View.java:2520)
08-02 18:13:12.079: E/AndroidRuntime(7780): at detailer.myapp.it.MyItems$6.onItemLongClick(MyItems.java:615)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:2001)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.view.View.showContextMenu(View.java:2520)
08-02 18:13:12.079: E/AndroidRuntime(7780): at detailer.myapp.it.MyItems$6.onItemLongClick(MyItems.java:615)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:2001)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.view.View.showContextMenu(View.java:2520)
08-02 18:13:12.079: E/AndroidRuntime(7780): at detailer.myapp.it.MyItems$6.onItemLongClick(MyItems.java:615)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:2001)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.view.View.showContextMenu(View.java:2520)
08-02 18:13:12.079: E/AndroidRuntime(7780): at detailer.myapp.it.MyItems$6.onItemLongClick(MyItems.java:615)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:2001)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.view.View.showContextMenu(View.java:2520)
08-02 18:13:12.079: E/AndroidRuntime(7780): at detailer.myapp.it.MyItems$6.onItemLongClick(MyItems.java:615)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:2001)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.view.View.showContextMenu(View.java:2520)
08-02 18:13:12.079: E/AndroidRuntime(7780): at detailer.myapp.it.MyItems$6.onItemLongClick(MyItems.java:615)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:2001)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.view.View.showContextMenu(View.java:2520)
08-02 18:13:12.079: E/AndroidRuntime(7780): at detailer.myapp.it.MyItems$6.onItemLongClick(MyItems.java:615)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:2001)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.view.View.showContextMenu(View.java:2520)
08-02 18:13:12.079: E/AndroidRuntime(7780): at detailer.myapp.it.MyItems$6.onItemLongClick(MyItems.java:615)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:2001)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.view.View.showContextMenu(View.java:2520)
08-02 18:13:12.079: E/AndroidRuntime(7780): at detailer.myapp.it.MyItems$6.onItemLongClick(MyItems.java:615)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:2001)
08-02 18:13:12.079: E/AndroidRuntime(7780): at android.view.View.showContextMenu(View.java:2520)
08-02 18:13:12.079: E/AndroidRuntime(7780): at detailer.myapp.it.MyItems$6.onIt
Any solution to the problem or alternatives to view a simple context dialog when I long press a list item?
You seem to have registered your ListView for a ContextMenu and set an OnItemLongClickListener that calls showContextMenu(), this creates a circular logic:
To fix this:
First, remove the OnItemLongClickListener since it is redundant with a ContextMenu.
Second, double check how you are using your ContextMenu. You have the menu saved in the layout folder and you don’t need to invoke showContextMenu() if you have already used registerForContextMenu().
To setup a ContextMenu, simply pass the whole ListView to registerForContextMenu():
You’ll need an XML like this:
Save this in a new folder
res/menu, I named it context_menu.xml.Then change your method to create the ContextMenu:
Now each row will automatically open a ContextMenu when long clicked.
If you need help with editing and deleting row, post the code that you use to create the ListView and Adapter.