需要在GridView项目上点击两次

时间:2013-07-06 15:14:12

标签: java android

我有一个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();
            }
        });
    }
});

任何想法如何只在单击时显示弹出菜单。

2 个答案:

答案 0 :(得分:1)

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

v.setOnClickListener(new OnClickListener() {

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

popupMenu.show();

答案 1 :(得分: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();
        });
    }