webentwicklung-frage-antwort-db.com.de

Erstellen eines Menüs nach einem langen Klick auf eine Listenansicht

Ich habe eine Listenansicht, die mit einer Datenbank verbunden ist und alle Einträge anzeigt. Ich möchte, dass ein Menü angezeigt wird, wenn der Benutzer lange auf ein Element in der Listenansicht (Datenbankeintrag) klickt und Optionen zum Bearbeiten oder Löschen des Eintrags anzeigt. Wie kann ich das machen.

Bis jetzt habe ich versucht, einen onItemLongClick-Listener und einen Toast darin zu verwenden, der die ID der Ansicht anzeigt, auf die lange geklickt wurde.

@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
        int position, long id) {

    String res = Long.toString(id);
     Toast toast = Toast.makeText(this, res, Toast.LENGTH_SHORT);
     toast.show();

    return true;
}
69
Eriz

Anstelle von onItemLongClick können Sie verwenden

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

hier legen Sie die Optionen für das Bearbeiten und Löschen fest.

Die Aktionen für das aus dem Kontextmenü ausgewählte Element können in verarbeitet werden

public boolean onContextItemSelected(final MenuItem item)

Weitere Informationen zum Kontextmenü finden Sie unter hier .

Eine schrittweise Anleitung finden Sie unter hier .

50
7bluephoenix

Zuerst müssen Sie Ihr Kontextmenü in der Listenansicht registrieren.

lv = (ListView) findViewById(R.id.list_view);
registerForContextMenu(lv);

Überschreiben Sie dann einfach die Aktivitätsmethoden.

/**
 * MENU
 */

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
      super.onCreateContextMenu(menu, v, menuInfo);
      if (v.getId()==R.id.list_view) {
          MenuInflater inflater = getMenuInflater();
          inflater.inflate(R.menu.menu_list, menu);
      }
}

@Override
public boolean onContextItemSelected(MenuItem item) {
      AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
      switch(item.getItemId()) {
         case R.id.add:
         // add stuff here
            return true;
          case R.id.edit:
            // edit stuff here
                return true;
          case R.id.delete:
        // remove stuff here
                return true;
          default:
                return super.onContextItemSelected(item);
      }
}

Hier ist ein Beispiel für die Datei menu_list.xml (Sie müssen die Datei im Ordner res/menu ablegen).

<?xml version="1.0" encoding="utf-8"?>
<menu
  xmlns:Android="http://schemas.Android.com/apk/res/Android">

       <item Android:id="@+id/add"
              Android:icon="@Android:drawable/ic_menu_add"
              Android:title="@string/menu_add" />

      <item Android:id="@+id/edit"
              Android:icon="@Android:drawable/ic_menu_edit"
              Android:title="@string/menu_edit" />

       <item Android:id="@+id/delete"
            Android:icon="@Android:drawable/my_icon_delete"
             Android:title="@string/menu_delete" />

</menu>

Hoffe, es wird helfen.

112
Zhar

Ein anderer Ansatz:

//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;
          }
        });
5
TharakaNirmana

Sie können Activity.openOptionsMenu() in Ihrer Klick-Item-Methode aufrufen

überprüfe hier
http://developer.Android.com/reference/Android/app/Activity.html#openOptionsMenu%28%29

2

**

nachdem Sie Ihr Kontextmenü in der Listenansicht registriert haben

** onCreateContextMenu überschreiben Methode wie diese

@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");
        }
    }

dann Kodierung für jedes Element, das ausgewählt werden kann

 @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;
    }
1
Marjan Dn

Ein kurzer Hinweis für diejenigen, die noch Probleme haben, es gibt zwei Methoden

registerForContextMenu(list);
unregisterForContextMenu(list);

Stellen Sie sicher, dass Sie die erste auswählen.

0
Saif Hakeem

Verwenden Sie registerForContextMenu (); Kontextmenü mit einem beliebigen View-Nachfolger verknüpfen.

Um auf ausgewählte ListItem-Daten zuzugreifen, verwenden Sie einfach AdapterView.AdapterContextMenuInfo. Z.B.:

@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
Serge