0

我有一个 GridView,我在其中为每个项目添加了一个 LinearLayout。LinearLayout 包含垂直顺序的图像和文本视图。

当我点击该项目时,我第一次在项目中看到蓝色背景,第二次点击时,GridView 的 onItemclick 侦听器会触发。我想知道为什么它没有在第一次点击时触发。

网格视图自定义适配器的getView方法是:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LinearLayout ll = new LinearLayout(ctx);
    ll.setOrientation(LinearLayout.VERTICAL);

    ImageView imgView = new ImageView(ctx);
    imgView.setImageResource(imgIds[position]);
    imgView.setFocusable(false);
    imgView.setFocusableInTouchMode(false);

    TextView tv = new TextView(ctx);
    tv.setText(names[position]);
    tv.setGravity(Gravity.CENTER);

    ll.addView(imgView);
    ll.addView(tv);

    ll.setFocusable(false);
    ll.setFocusableInTouchMode(false);
    ll.setClickable(false);

    return ll;
}

此网格的项目单击侦听器上的 MainActivity 是:

GridView gv = (GridView) findViewById(R.id.gv);
gv.setAdapter(new GridAdapter(MainActivity.this));
gv.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View v, int position,
            long id) {

        popupMenu = new PopupMenu(MainActivity.this, v);
        popupMenu.getMenu().add(Menu.NONE, ONE, Menu.NONE, "Play");
        v.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                popupMenu.show();
            }
        });
    }
});

知道如何仅在单击时显示弹出菜单。

4

2 回答 2

1

为什么不调用 popupMenu.show(); 直接在 onItemClick() 中?只需替换代码

v.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            popupMenu.show();
        }
    });

popupMenu.show();
于 2013-07-06T15:19:39.080 回答
1

您正在设置在单击网格单击网格中的项目时显示弹出菜单。

尝试这个:

@Override
    public void onItemClick(AdapterView<?> parent, View v, int position,
            long id) {

        popupMenu = new PopupMenu(MainActivity.this, v);
        popupMenu.getMenu().add(Menu.NONE, ONE, Menu.NONE, "Play");
                popupMenu.show();
        });
    }
于 2013-07-06T15:19:45.953 回答