Impossible d'exécuter OnItemClick pour GridView dans popupWindow
Question
I ont une Gridview que j'affichage dans un popupWindow (le gridview se trouve dans une mise en page transparent, qui hérite de LinearLayout et vient partiellement un arrière-plan transparent). Je ne peux jamais OnItemClick de cette GridView à exécuter. Quand je touche une image dans mon gridview il apparaît à clicked (changements d'image de bachgrond), mais OnItemClick n'est pas appelé.
est ci-dessous le code de mon adaptateur et mon popupview contenant le GRIDVIEW. Merci!
//Adapter
ImageAdapter public class {étend BaseAdapter Contexte mContext privé; itemBackground privé int;
public ImageAdapter(Context c) {
mContext = c;
//---setting the style---
TypedArray a = c.obtainStyledAttributes(R.styleable.Gallery1);
itemBackground = a.getResourceId(R.styleable.Gallery1_android_galleryItemBackground, 0);
a.recycle();
}
....
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(mContext);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageResource(images[position]);
imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
imageView.setBackgroundResource(itemBackground);
return imageView;
}
public Integer[] images = {
R.drawable.sound1,
R.drawable.sound2,
R.drawable.sound3,
R.drawable.sound4
};
}
//////////In Activity, onCreate////////
...
final LayoutInflater inflater=(LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final TransparentLayout musicGrid = (TransparentLayout) inflater.inflate(R.layout.gridviewpopup, null, false);
final GridView gView = (GridView) musicGrid.findViewById(R.id.music_gridview);
gView.setAdapter(new ImageAdapter(this));
final PopupWindow soundSelectorWindow = new PopupWindow(this);
soundSelectorWindow.setContentView(musicGrid);
soundSelectorWindow.setTouchable(true);
gView.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent, View v, int position, long id)
{
//NEVER GETS HERE
soundSelectorWindow.dismiss();
}
});
La solution
Et si vous supprimez soundSelectorWindow.setTouchable(true);
Autres conseils
Je ne peux pas expliquer pourquoi le OnItemClickListener ne fonctionne pas, mais quand je OnTouchListener substitué avec cela a fonctionné. Avez-vous besoin de faire la différence entre quel élément est cliqué ou est-ce juste assez pour savoir que le menu contextuel a été cliqué? De vous le code, il ressemble à celui-ci, donc OnTouch devrait fonctionner:
popup.setTouchable(true);
popup.setFocusable(true);
gView.setClickable(true);
gView.setOnTouchListener(new View.OnTouchListener()
{
public boolean onTouch(View v, MotionEvent event)
{
popup.dismiss();
return true;
}
});
Vérifiez la taille VM de l'émulateur de sorte que son assez bon pour faire fonctionner votre application dans sa machine virtuelle.
Vérifiez la taille de votre <ApplicationName.apk>
. Gardez-le en min dimensionnées de telle sorte que Emulator ne trouvera pas de difficultés dans l'exécution de votre application.