我有一个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();
}
});
}
});
任何想法如何只在单击时显示弹出菜单。
答案 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();
});
}