Android ListView onItemClick在确切位置显示弹出窗口

问题描述

我有一个PopupWindow,当我在Item上单击ListView显示为下拉列表:

@Override
        public void onItemClick(AdapterView<?> parent,View view,int position,long id) {
            View v = getLayoutInflater().inflate(R.layout.popup_click_menu,null);
            final PopupWindow mypopupWindow = new PopupWindow(v,300,RelativeLayout.LayoutParams.WRAP_CONTENT,true);
            mypopupWindow.showAsDropDown(view,-153,0);
        }

结果是这样的:

ListView with two Items,the last one is clicked

我的问题是:我想让弹出窗口具有动态位置。因此,如果我单击Item的中间,那么它应该显示在中间。我该怎么办?

解决方法

您可以使用TouchListener解决此问题:

list.setOnTouchListener(new OnTouchListener() {
            public boolean onTouch(View view,MotionEvent event) {
                positionX = (int) event.getX();

                return false; // not consumed; forward to onClick
            }
        });

然后您具有精确的x位置,可以将PopupWindow移动onItemClick

mypopupWindow.showAsDropDown(view,positionX,0);