Android : Context Menu con imagen por item

Blog >Lista Soluciones >  Context Menu II


Context Menu con ImageView + texto por item




Continuamos con la extensión del post Menu Contextual, en esta ocasión vamos a hacer un contextMenu con una imagen por item.

Aunque lo usemos como ContextMenu, en realidad es un dialogo con una vista personalizada, vamos a utilizar un ListView.

Para seguir con este post es imprescindible tener un listview con imagen + texto, podreis encontrar el código necesario en este post anterior ListView

Una vez tengamos nuestro Listview, simplemente tenemos que convertir esa listview en un AlertDialog clicable, que hará la función de contextMenu. Hay que hacer este "apaño" porque la clase MenuContext no acepta imágenes, ya sea intentando ponerla desde XML como






Como he dicho anteriormente contamos con las siguientes clases y recursos del post ListView que las enumero a continuación:
  • elemento.java 
  • MenuAdapter.java 
  • itemlist.xml 
  • imágenes icon1, icon2, icon3
  • iconomenujuego 


Creamos la clase ContextMenuList, en la que jugamos con el adaptador MenuAdapter, para crear el Dialog con los elementos de su lista, es decir icono + texto:
 
public class ContextMenuList implements DialogInterface.OnCancelListener, DialogInterface.OnDismissListener{
 
 private Context context;
 private String titulo;
 private ArrayList arraydir;
 private Activity a;
 int iconoid;
 
 MenuAdapter adaptador;
 //CONSTRUCTOR
 public ContextMenuList(Context c,String titulo,Activity a,int icon) {
  this.context=c;
  this.titulo=titulo;
  this.a=a;
  this.iconoid=icon;
        arraydir = new ArrayList();
 }
 //CREAMOS LA LISTA DE LOS ELEMENTOS DEL MENU
 public void crearListaAdaptador(int recurso, String titulo){
        elemento item;
        item = new elemento(context.getResources().getDrawable(recurso),titulo);
        arraydir.add(item);
 }
 //SE LLAMA UNA VEZ SE ACABA DE LLAMAR A LOS ITEMS
 public void adaptadorCompleto(){
        adaptador= new MenuAdapter(a, arraydir);
 }
 //METODO QUE CREA EL ALERTDIALOG
 public Dialog createMenu() {
  final AlertDialog.Builder builder = new AlertDialog.Builder(context);
  builder.setTitle(titulo);
  builder.setIcon(context.getResources().getDrawable(iconoid));
  builder.setAdapter(adaptador, new DialogInterface.OnClickListener() {
  @Override
  public void onClick(DialogInterface dialoginterface, int i) {
   elemento item = (elemento) adaptador.getItem(i);

   }
  });
  builder.setInverseBackgroundForced(true);
  AlertDialog dialog = builder.create();
  dialog.setOnCancelListener(this);
  dialog.setOnDismissListener(this);
  
  return dialog;
 }
 @Override
 public void onDismiss(DialogInterface dialog) {
 // TODO Auto-generated method stub
 }
 @Override
 public void onCancel(DialogInterface dialog) {
   // TODO Auto-generated method stub
 }
}


Y nuestra actividad principal en la que sólo hemos colocado un botón para cuando hagamos click aparezca el context menu es así :
 
public class MainActivity extends Activity {
 private Button b1;
 private ContextMenuList MenuContextual;
 Dialog dialog;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
  MenuContextual=new ContextMenuList(this, "Graficos", this,getResources().getIdentifier("iconomenujuego" , "drawable", getPackageName()));
  MenuContextual.crearListaAdaptador(getResources().getIdentifier("icon1" , "drawable", getPackageName()), " Bitmaps");
  MenuContextual.crearListaAdaptador(getResources().getIdentifier("icon2" , "drawable", getPackageName()), " Vectorial");
  MenuContextual.crearListaAdaptador(getResources().getIdentifier("icon3" , "drawable", getPackageName()),  " 3D");
  MenuContextual.adaptadorCompleto();
  
  
  b1=(Button) findViewById(R.id.button1);
  b1.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
    dialog=MenuContextual.createMenu();
    dialog.show();
   }
  });
    } 
}

Pues ya tenemos nuestro Dialog camuflado de Menu Context y con todas sus funcionalidades

Y este es el resultado :




Podeis descargar el código fuente de thebestandroide con sólo compartir en facebook,twitter,linkedin o suscribirte a nuestro canal RSS más abajo. 



Compartir Compartir Compartir Compartir




2 comentarios: