android - 在onContextItemSelected方法中,item.getMenuInfo得到null ?
PHP中文网
PHP中文网 2017-04-17 13:00:31
0
1
650

在我的一个项目中,使用了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中文网

认证高级PHP讲师

reply all(1)
Peter_Zhu

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

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template