1

我在尝试在 PopupWindow 中使用 GridView 时遇到问题。在我的 Activity 的 onCreate 方法中,我从 xml 膨胀一个 gridview,如下所示:

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

希望此 GridView 在单击按钮时弹出。同样在我的活动的 onCreate 中,我有:

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

单击按钮时,我从 GridView.onMeasure(int, int) 抛出 ClassCastException。

谁能向我解释我做错了什么?

4

1 回答 1

1

我最终找到了问题所在。我正在使用 Hello, Gallery 示例中的 ImageAdapter 代码。其中包含一行代码引用了一个画廊:

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

当与 GridView 一起使用时,这显然会导致类转换异常。

现在我的 GridView 在弹出窗口中正确显示,我无法捕获 OnItemClick 事件。下面是我的代码。当我在弹出窗口的网格视图中进行选择时,永远不会调用 OnItemClick。有任何想法吗?

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();
      }
 }); 
于 2009-12-22T07:06:56.710 回答