在我的一个项目中,使用了PullToRefresh的开源项目的下拉刷新的ListView。
现在,我想在该ListView中使用一个上下文菜单,并且得到触发菜单的Item的Position,用以进行各种处理。
1、在Activity的onCreate()方法里注册了我的ListView
registerForContextMenu(mPTRlistview);
2、Activity中覆写onCreateContextMenu
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo info) {
super.onCreateContextMenu(menu, v, info);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_context,menu);
}
3、Activity中覆写onContextItemSelected
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
int position = menuInfo.position;
。。。
。。。
结果是menuInfo.position是会产生空指针异常的。
各种找寻结果,可猜测是PullToRefersh自己定制的ListView没有覆写getContextMenuInfo
一个view要想能够生成自己的MenuInfo,必须要重新getContextMenuInfo这个函数。
public class PullToRefreshListView extends PullToRefreshAdapterViewBase
public abstract class PullToRefreshAdapterViewBase extends PullToRefreshBase implements OnScrollListener
然后在AbsListView里面有
@Override
protected ContextMenuInfo getContextMenuInfo() {
return mContextMenuInfo;
}
现在我不知道如何解决这个item.getMenuInfo返回NULL的问题了,有了解这方面的大哥指点一二吧~
registerForContextMenu(mPTRlistview) is wrong here, you need to use listview, and mPTRlistview is not a listview. Need to use mPTRlistview.getRefreshableView();