Не удается выполнить OnItemClick for GridView в PopupWindow - PullRequest
3 голосов
/ 21 января 2010

У меня есть gridView, который я отображаю во всплывающем окне (gridView находится в прозрачном макете, который наследуется от linearlayout и имеет только частично прозрачный фон). Я никогда не могу получить OnItemClick этого GridView для выполнения. Когда я касаюсь изображения в моем виде сетки, на нем появляется , по которому нужно щелкнуть (изменяется bachgrond), но OnItemClick не вызывается.

Ниже приведен код моего адаптера и моего всплывающего окна, содержащего gridView. Спасибо!

//Adapter

открытый класс ImageAdapter расширяет BaseAdapter { закрытый контекст mContext; private int itemBackground;

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();

        }
    }); 

Ответы [ 3 ]

3 голосов
/ 21 января 2010

Я не могу объяснить, почему OnItemClickListener не работает, но когда я заменил OnTouchListener, это сработало. Вам нужно различать, по какому элементу щелкают, или достаточно просто знать, что щелкнуло всплывающее окно? Из вашего кода это выглядит как последний, поэтому OnTouch должен работать:

    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;
        }
    }); 
3 голосов
/ 21 января 2010

что произойдет, если вы удалите soundSelectorWindow.setTouchable(true);

1 голос
/ 19 октября 2011

Проверьте размер виртуальной машины эмулятора, чтобы он был достаточен для запуска приложения на его виртуальной машине.
Проверьте размер вашего <ApplicationName.apk>. Держите его в минимальном размере, чтобы эмулятор не обнаружил никаких трудностей при запуске приложения.

...