Android ListPopupWindow.CreateDragToopEnglistener()不工作

Android ListPopupWindow.CreateDragToopEnglistener()不工作,android,android-listview,android-arrayadapter,popupmenu,Android,Android Listview,Android Arrayadapter,Popupmenu,我想通过ArrayAdapter显示的列表项中的ImageButton显示上下文菜单 我已经创建了ListPopupWindow对象并为其设置了ArrayAdapter。然后,我将onTouchListener设置为holder.menu。我通过从ListPopupWindowCompat获取onTouchListener来实现这一点,以保持兼容性 但是,当我触摸holder.menu时,它什么也不做 public class MyAdapter extends ArrayAdapter<

我想通过ArrayAdapter显示的列表项中的ImageButton显示上下文菜单

我已经创建了ListPopupWindow对象并为其设置了ArrayAdapter。然后,我将onTouchListener设置为holder.menu。我通过从ListPopupWindowCompat获取onTouchListener来实现这一点,以保持兼容性

但是,当我触摸holder.menu时,它什么也不做

public class MyAdapter extends ArrayAdapter<MyObject>{

    private final ActivityMain mActivity;
    private final List<MyObject> mMyObjectList;
    private final ListPopupWindow mPopupWindow;

    private final ImageFetcher mImageFetcher;

    public AdapterWebcam(ActivityMain activity, List<MyObject> myObjectList, ImageFetcher imageFetcher){
        super(activity, R.layout.listitem_webcam, webcamList);
        this.mActivity = activity;
        this.mMyObjectList = myObjectList;
        this.mImageFetcher = imageFetcher;
        this.mPopupWindow = new ListPopupWindow(mActivity);
        mPopupWindow.setWidth(600);
        mPopupWindow.setAdapter(new ArrayAdapter<String>(mActivity, android.R.layout.simple_list_item_1,
                new String[]{"One", "two", "three"}));

    }

    public View getView(int position, View convertView, ViewGroup parent){
        View item = convertView;
        ViewHolder holder;
        String url = mMyObjectList.get(position).getUrl();


        if(item == null){
            LayoutInflater inflater = mActivity.getLayoutInflater();
            item = inflater.inflate(R.layout.listitem_object, null);
            holder = new ViewHolder();
            holder.text = (TextView) item.findViewById(R.id.listitem_object_title);
            holder.image = (ImageView) item.findViewById(R.id.listitem_object_imageview);
            holder.menu = (ImageButton) item.findViewById(R.id.listitem_object_menubutton);

            item.setTag(holder);
        }else{
            holder = (ViewHolder) item.getTag();
        }

        holder.text.setText(mMyObjectList.get(position).getName());
        mImageFetcher.loadImage(url, holder.image);
        holder.menu.setOnTouchListener(ListPopupWindowCompat.createDragToOpenListener(mPopupWindow, holder.menu));

        return item;
    }

    static class ViewHolder{
        TextView text;
        ImageView image;
        ImageButton menu;
    }


}
但我有以下堆栈跟踪:

02-18 12:54:41.846  11977-11977/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.iamaner.skiwebcam, PID: 11977
    java.lang.NullPointerException
            at android.widget.PopupWindow.getMaxAvailableHeight(PopupWindow.java:1271)
            at android.widget.ListPopupWindow.buildDropDown(ListPopupWindow.java:1142)
            at android.widget.ListPopupWindow.show(ListPopupWindow.java:554)
            at com.iamaner.skiwebcam.AdapterWebcam$1.onTouch(AdapterWebcam.java:64)
            at android.view.View.dispatchTouchEvent(View.java:7708)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2068)
            at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1515)
            at android.app.Activity.dispatchTouchEvent(Activity.java:2468)
            at android.support.v7.app.ActionBarActivityDelegateICS$WindowCallbackWrapper.dispatchTouchEvent(ActionBarActivityDelegateICS.java:260)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2016)
            at android.view.View.dispatchPointerEvent(View.java:7893)
            at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:3954)
            at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3833)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3449)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3418)
            at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3525)
            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3426)
            at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3582)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3449)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3418)
            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3426)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399)
            at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5602)
            at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5582)
            at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5553)
            at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:568

还需要为ListPopupWindow提供高度参数,请按以下方式操作:

mPopupWindow.setHeight(400);

或者使用ListPopupWindow.WRAP_CONTENT而不是400来根据元素设置弹出窗口的高度。

我尝试过mPopupWindow.setHeight400;和mpoppupWindow.setHeightListPopupWindow.WRAP\u CONTENT;。。。。但是没有运气,相同的堆栈跟踪:我可能错了,但是您没有为ListPopupWindow设置任何主播视图。请检查一下它是否能帮到你。
mPopupWindow.setHeight(400);