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