creating a menu after a long click event on a list view

前端 未结 7 664
無奈伤痛
無奈伤痛 2020-12-02 07:32

I have a list view connected to a database, showing a all the entries. I want a menu to show up if the user long clicks a item in the listview(database entry), showing optio

相关标签:
7条回答
  • 2020-12-02 07:47

    Instead of using onItemLongClick you can use

    public void onCreateContextMenu(final ContextMenu menu, 
                        final View v, final ContextMenuInfo menuInfo) {
     ...
    }
    

    where you setup the options for edit and delete or whatever you need to.

    The actions for the item selected from the context menu can be processed in

    public boolean onContextItemSelected(final MenuItem item)
    

    For more information on context menu see here.

    For a step by step tutorial visit here.

    0 讨论(0)
  • 2020-12-02 07:49

    A quick note for those still struggling, there're two methods

    registerForContextMenu(list);
    unregisterForContextMenu(list);
    

    Make sure you pick the first.

    0 讨论(0)
  • 2020-12-02 07:52

    Use registerForContextMenu(); to link context menu to any View successor.

    To access to selected ListItem data, simple use the AdapterView.AdapterContextMenuInfo. E.g.:

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        AdapterView.AdapterContextMenuInfo menuinfo = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
        long selectid = menuinfo.id; //_id from database in this case
        int selectpos = menuinfo.position; //position in the adapter
        switch (item.getItemId()) {
        case 1:
            doSomething(selectid);
        break;
        case 2:
            doSomethingElse(selectpos);
        }
        return super.onContextItemSelected(item);
    }
    
    0 讨论(0)
  • 2020-12-02 07:53

    **

    after register your context menu on list view

    ** override onCreateContextMenu Method like this

    @Override
        public void onCreateContextMenu(ContextMenu menu,View v, ContextMenu.ContextMenuInfo menuInfo){
            if (v.getId() == R.id.listView){
                AdapterView.AdapterContextMenuInfo info =(AdapterView.AdapterContextMenuInfo)menuInfo;
                MenuItem mnu1=menu.add(0,0,0,"Delete");
                MenuItem mnu2=menu.add(0,1,1,"Share");
            }
        }
    

    then coding for each item that can be selected

     @Override
        public boolean onContextItemSelected(MenuItem menuItem){
            AdapterView.AdapterContextMenuInfo info=(AdapterView.AdapterContextMenuInfo)menuItem.getMenuInfo();
            switch (menuItem.getItemId()) {
                case 0:
                    Toast.makeText(this, "Delete Selected", Toast.LENGTH_LONG).show();
                    break;
                case 1:
                    Toast.makeText(this, "Share Selected", Toast.LENGTH_LONG).show();
                    break;
    
                default:
                    break;
    
            }
            return true;
        }
    
    0 讨论(0)
  • 2020-12-02 07:54

    You can call Activity.openOptionsMenu() in your click item method

    check here
    http://developer.android.com/reference/android/app/Activity.html#openOptionsMenu%28%29

    0 讨论(0)
  • 2020-12-02 07:59

    Another approach:

    //Deleted individual cart items
        //on list view cell long press
        cartItemList.setOnItemLongClickListener (new OnItemLongClickListener() {
              @SuppressWarnings("rawtypes")
            public boolean onItemLongClick(AdapterView parent, View view, final int position, long id) {
                  final CharSequence[] items = { "Delete" };
    
                    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    
                    builder.setTitle("Action:");
                    builder.setItems(items, new DialogInterface.OnClickListener() {
    
                        public void onClick(DialogInterface dialog, int item) {
                            cart = cartList.get(position);
                            db.removeProductFromCart(context, cart);
    
                            new AlertDialog.Builder(context)
                            .setTitle(getString(R.string.success))
                            .setMessage(getString(R.string.item_removed))
                            .setPositiveButton("Done", new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int which) { 
                                    Intent intent = new Intent(CartDetailsActivity.this, HomeScreen.class);
                                    startActivity(intent);
                                }
                             })
                             .show();
    
                        }
    
                    });
    
                    AlertDialog alert = builder.create();
    
                    alert.show();
                //do your stuff here
                  return false;
              }
            });
    
    0 讨论(0)
提交回复
热议问题