search

Home  >  Q&A  >  body text

android - 在onContextItemSelected方法中,item.getMenuInfo得到null ?

在我的一个项目中,使用了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的问题了,有了解这方面的大哥指点一二吧~

PHP中文网PHP中文网2795 days ago664

reply all(1)I'll reply

  • 天蓬老师

    天蓬老师2017-04-17 13:02:31

    registerForContextMenu(mPTRlistview) is wrong here, you need to use listview, and mPTRlistview is not a listview. Need to use mPTRlistview.getRefreshableView();

    reply
    0
  • Cancelreply