【问题标题】:Android Floating Context Menu get item clickedAndroid浮动上下文菜单获得点击的项目
【发布时间】:2014-07-18 07:43:40
【问题描述】:

我正在尝试为 fragmentActivity 中的网格视图编写浮动上下文菜单。我想获取用户单击的项目。我浏览过很多帖子,他们都说要在 onContextItemSelected 中使用 getMenuInfo() 方法,但在我的情况下它始终为 null .. 谁能帮忙?

在 onCreate 我正在这样做-

registerForContextMenu(mGridView);

上下文菜单方法 -

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    menu.setHeaderTitle("Choose an option");
    menu.add(0, v.getId(), 0, "Hide");
    menu.add(0, v.getId(), 0, "Info");

}

@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
    int position = info.position; // Null pointer Exception

    if(item.getTitle()=="Hide") {
            hideview(item.getItemId());
            return true;
    }
    else if(item.getTitle()=="Info"){
            showinfo(item.getItemId());
            return true;
    }
    else{
            return super.onContextItemSelected(item);
    }
}

【问题讨论】:

    标签: android android-gridview android-menu android-contextmenu


    【解决方案1】:

    我终于搞定了。

    问题是,我使用的自定义 GridView 没有实现 getContextMenuInfo() 方法。我在下面添加了几行,效果很好 -

    @Override
    protected ContextMenuInfo getContextMenuInfo(){
        ContextMenuInfo menuInfo = super.getContextMenuInfo();
        if(menuInfo==null){
            final ListAdapter adapter = mAdapter;
            final int motionPosition = mPerformClick.mClickMotionPosition;
            if (adapter != null && mItemCount > 0 &&
                    motionPosition != INVALID_POSITION &&
                    motionPosition < adapter.getCount()) {
                final View view = getChildAt(motionPosition);
    
                if (view != null) {
                    final int clickPosition = motionPosition + mFirstPosition;
                    menuInfo = new AdapterContextMenuInfo(view, clickPosition, 
                                                     adapter.getItemId(clickPosition));
                }
            }
        }
        return menuInfo;
    }
    

    我已经发布了一个小教程here 以防万一有人需要。

    【讨论】:

      猜你喜欢
      • 2015-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多