Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无法在PopupWindow中为GridView执行OnItemClick_Android_Irc - Fatal编程技术网

Android 无法在PopupWindow中为GridView执行OnItemClick

Android 无法在PopupWindow中为GridView执行OnItemClick,android,irc,Android,Irc,我有一个显示在弹出窗口中的gridView(gridView位于一个透明布局中,该布局继承自linearlayout,只是有一个部分透明的背景)。我永远无法执行此GridView的OnItemClick。当我在gridview中触摸一个图像时,它似乎被单击(图像bachgrond发生变化),但OnItemClick没有被调用 下面是我的适配器和包含gridView的popupview的代码。谢谢 //Adapter 公共类ImageAdapter扩展了BaseAdapter{ 私有上下文; 私

我有一个显示在弹出窗口中的gridView(gridView位于一个透明布局中,该布局继承自linearlayout,只是有一个部分透明的背景)。我永远无法执行此GridView的OnItemClick。当我在gridview中触摸一个图像时,它似乎被单击(图像bachgrond发生变化),但OnItemClick没有被调用

下面是我的适配器和包含gridView的popupview的代码。谢谢

//Adapter
公共类ImageAdapter扩展了BaseAdapter{ 私有上下文; 私人背景

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

}

//在活动中,onCreate////////
...
最终LayoutFlater充气器=(LayoutFlater)this.getSystemService(Context.LAYOUT\u充气器\u服务);
final TransparentLayout musicGrid=(TransparentLayout)充气器。充气(R.layout.gridviewpopup,null,false);
final GridView gView=(GridView)musicGrid.findView(R.id.music\u GridView);
gView.setAdapter(新的ImageAdapter(this));
最终PopupWindow SoundSelector窗口=新的PopupWindow(此);
soundSelectorWindow.setContentView(musicGrid);
soundSelectorWindow.setTouchable(真);
gView.setOnItemClickListener(新的OnItemClickListener()
{
public void onItemClick(AdapterView父视图、视图v、整型位置、长id)
{   
//永远不会到这里
soundSelectorWindow.Disclose();
}
}); 

如果删除
声音选择器或窗口,会发生什么情况。可设置触摸(true)

我无法解释为什么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;
        }
    }); 

检查模拟器的虚拟机大小,使其足以在其虚拟机中运行您的应用程序。

检查
的大小。保持最小大小,以便Emulator在执行应用程序时不会发现任何困难。

我制作了一个非常简单的应用程序来演示此行为,以防有人想看一下:虽然示例的设计很奇怪,但毕竟是示例。您不需要设置为可触摸-默认情况下是这样的。但是,您确实需要设置popup.setFocusable(true);非常感谢你,亚历克斯!这就成功了。我仍然不确定为什么我能够在没有popupwindow可调焦选项的情况下滚动我的gridView,但不能进行选择。是的,这也行。不幸的是,我需要知道点击了哪个项目。谢谢你看!
//////////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();

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