2009-11-11 4 views
1

J'ai un problème en essayant d'utiliser un GridView dans un PopupWindow . Sur ma méthode onCreate d'activité, je suis un Gonflage gridview de xml comme suit:PopupWindow avec GridView - Problème avec la vue de gonflement

LayoutInflater inflater = (LayoutInflater)this.getSystemService 
(Context.LAYOUT_INFLATER_SERVICE); 
final GridView popupview = (GridView) inflater.inflate 
(R.layout.gridviewpopup, null, false); 
popupview.setAdapter(new ImageAdapter(this)); 

souhaite que ce GridView popup de sur un bouton clic. Aussi à l'intérieur de onCreate de mon activité, j'ai:

final Button addButton = (Button) findViewById(R.id.add); 
addButton.setOnClickListener(new View.OnClickListener() { 
public void onClick(View v) { 
    PopupWindow mwindow = new PopupWindow(popupview, 100, 100); 
    mwindow.showAtLocation(findViewById(R.id.main), Gravity.CENTER, 100, 100); 
    mwindow.setFocusable(true); 
      } 
}); 

Le cliquage, je jette un ClassCastException de GridView.onMeasure (int, int). Est-ce que quelqu'un peut m'expliquer s'il vous plaît ce que je fais mal?

+0

Avez-vous envisagé d'ajouter la vue gridview à la disposition principale de Popupwindows et de définir l'attribut setVisibility sur GONE? Ensuite, le réglage à nouveau visible lorsque nécessaire. De cette façon, vous n'avez pas à vous soucier de gonfler manuellement la vue. – Ralphleon

Répondre

1

J'ai fini par trouver le problème. J'utilisais le code ImageAdapter de l'exemple Hello, Gallery. Qui contenait une ligne de code faisant référence à une Gallary:

imageView.setLayoutParams(new Gallery.LayoutParams(150, 120)); 

Lorsqu'il est utilisé avec un GridView, cela provoque évidemment une exception de classe jeté.

Maintenant que mon GridView s'affiche correctement dans une fenêtre popup, je suis ayant des problèmes pour capturer l'événement OnItemClick. Voici mon code. OnItemClick n'est jamais appelé lorsque je fais une sélection dans ma grille gridview dans la popup popup. Des idées?

final GridView gView = (GridView) grid_layout.findViewById 
(R.id.gridview_layout); 
gView.setWillNotDraw(false); 
gView.setFocusableInTouchMode(true); 
gView.setClickable(true); 
gView.setAdapter(new ImageAdapter(this)); 

final PopupWindow soundSelectorWindow = new PopupWindow(this); 
soundSelectorWindow.setContentView(grid_layout); 
soundSelectorWindow.setBackgroundDrawable(new BitmapDrawable()); 
soundSelectorWindow.setOutsideTouchable(false); 
soundSelectorWindow.setTouchable(true); 

gView.setOnItemClickListener(new OnItemClickListener() 
    { 
    public void onItemClick(AdapterView parent, View v, int position, 
long id) 
     { 
     //Never gets here. 
     soundSelectorWindow.dismiss(); 
     } 
}); 
+0

Ceci est une réponse ou une question? –

Questions connexes