在Android上创建上下文菜单时,getMenuInflater()方法未定义问题

21

我正在尝试在一个片段(fragment)内创建一个上下文菜单项,但是我遇到了getMenuInflater()方法的问题。它未定义。我已经导入了所有必要的包。有人能指出我在这里做错了什么吗?

这是我的代码:

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.view.MenuItem;

public class FeaturedFragment extends Fragment {
    public FeaturedFragment() {
    }
    public static final String ARG_SECTION_NUMBER = "section_number";

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.featured_fragment,container,false);
        registerForContextMenu(view);
        return view;
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
    {
        super.onCreateContextMenu(menu, v, menuInfo);
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.toggleview_menu, menu);
    }
}

这是我的menu.xml文件

  <menu xmlns:android="http://schemas.android.com/apk/res/android" >    
      <item android:id="@+id/toggle_view"
         android:title="Change to ListView"
         android:icon="@drawable/collections_view_as_grid"
         android:showAsAction="always" />
      <item android:id="@+id/grid_view"
         android:title="Grid View"
         android:orderInCategory="99"
         android:showAsAction="never" />
      <item android:id="@+id/list_view"
         android:title="List View"
         android:orderInCategory="99"
         android:showAsAction="never" />
  </menu>
1个回答

47

更改:

MenuInflater inflater = getMenuInflater();

变成:

MenuInflater inflater = getActivity().getMenuInflater();

谢谢。它有效了。但是我的菜单项在视图中没有显示。我已经编辑了我的帖子并附上了菜单XML文件。 - intrepidkarthi
你不是应该在ActivityonCreateOptionsMenu方法中使用getMenuInflater()吗? - waqaslam
开发者指南(http://developer.android.com/guide/topics/ui/menus.html#FloatingContextMenu)表示我们可以将其放置在活动或片段中。 - intrepidkarthi
在一个片段内,onCreateOptionMenu将MenuInflater作为第二个参数传递。给出的答案是可以的。但是,如果允许在参数中提供inflater,我会选择这种方式,这是个人偏好。 - Les
@Les - 但这是关于onCreateContextMenu内部的,而不是onCreateOptionsMenu。没有MenuInflater参数。 - Ted Hopp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接