ListView PopMenu



http://developer.android.com/intl/es/reference/android/widget/PopupMenu.html

En este tutorial le voy a mostrar la diferencia entre la utilización de Menu y el Menu que sale desde la fila llamado PopMenu



Antes de hacer este tuto les recomiendo que vean el tuto ListView Simple por que lo utilizaremos para cargar el listView

Otro tutorial que podríamos utilizar para las filas del listView es AlertDialog personalizado que perfectamente funcionaría. Aunque no necesariamente tiene que ser personalizado, puede ser un AlertDialog simple, común y corriente.

MainActivity.java (dentro la carpeta java)
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.PopupMenu;
import android.widget.Toast;


public class MainActivity extends ActionBarActivity {

    ListView lista;


    String[] personas = {
            "pablo",
            "ramiro",
            "vilma",
            "canela",
            "tito",
            "nicolas",
            "maira",
            "pepita",
            "honguito"
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        lista = (ListView) findViewById(R.id.listView1);

        ArrayAdapter adaptador = new ArrayAdapter(this, android.R.layout.simple_list_item_1, personas);

        lista.setAdapter(adaptador);
        lista.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView adapterView, View view, int i, long l) {
                Toast.makeText(getApplicationContext(), "posicion " + (i + 1) + personas[i], Toast.LENGTH_SHORT).show();
            }
        });
        lista.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView parent, View view, int position, long id) {
                PopupMenu popup = new PopupMenu(MainActivity.this, view);
                popup.getMenuInflater().inflate(R.menu.menu_main, popup.getMenu());
                popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {

                    //MENU FILA
                    @Override
                    public boolean onMenuItemClick(MenuItem item) {
                        switch (item.getItemId()) {
                            case R.id.menu_eliminar:
                                Toast.makeText(MainActivity.this, "soy eliminar de la fila", Toast.LENGTH_LONG).show();
                                break;
                        }
                        return true;
                    }
                    //FIN MENU FILA
                });
                popup.show();
                return true;
            }
        });
    }


    //MENU OCULTO //
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_eliminar:
                Toast.makeText(MainActivity.this, "soy eliminar del menu oculto", Toast.LENGTH_LONG).show();
                break;
        }
        return true;
    }
    //FIN MENU OCULTO//
}

activity_main.xml (dentro la carpeta res -> layout)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/listView1"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

</RelativeLayout>


menu_main.xml (dentro la carpeta res -> menu)
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">
<item
    android:id="@+id/menu_eliminar"
    android:title="Eliminar"
    android:orderInCategory="100"
    app:showAsAction="never" />
</menu>

build.gradle 
Tenemos que subir la versión de la 9 a la 11
apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.1"

    defaultConfig {
        applicationId "com.tatoado.animator"
        minSdkVersion 11
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.2'
}

2 comentarios:

  1. Como hago para eleiminar un elemento de la listview a partir del popup y como obtengo todos los datos de la listview.
    Gracias

    ResponderEliminar
  2. Buenas matias , quiciera saber como hacer que mi aplicación no entre en suspensión ya que esta reproduciendo audio y una vez se apaga el celular deja de reproducir

    ResponderEliminar