Android 片段中的弹出菜单未出现

Android 片段中的弹出菜单未出现,android,menu,fragment,popupmenu,android-imagebutton,Android,Menu,Fragment,Popupmenu,Android Imagebutton,对于android来说相当陌生,我目前在片段中实现我的ImageButton上的PopupMenu时遇到了一些困难。代码中没有错误,模拟器能够成功构建,但单击ImageButton,弹出菜单不会显示 OneFragment.java public class OneFragment extends Fragment { public OneFragment() { // Required empty public constructor } @Override public void

对于android来说相当陌生,我目前在片段中实现我的
ImageButton
上的
PopupMenu
时遇到了一些困难。代码中没有错误,模拟器能够成功构建,但单击
ImageButton
,弹出菜单不会显示

OneFragment.java

public class OneFragment extends Fragment {

public OneFragment() {
    // Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View rootview = inflater.inflate(R.layout.fragment_one, container,false);

    ImageButton popupButton = (ImageButton)rootview.findViewById(R.id.chineseTelevision);
    popupButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            PopupMenu popupMenu = new PopupMenu(getActivity().getApplicationContext(), v);
            popupMenu.inflate(R.menu.menu_main);
            popupMenu.show();
        }
    });

    return inflater.inflate(R.layout.fragment_one, container, false);
  }
}
应用Pavneet的解决方案后(哪个是正确的解决方案)

我偶然发现了另一个错误

android.view.InflateException: Binary XML file line #17: Failed to resolve attribute at index 6: TypedValue{t=0x3/d=0x486 "res/drawable/ic_menu_moreoverflow_material.xml" a=1 r=0x10803d6}
我发现这个错误是由android.support.v7.widget.PopupMenu引起的


此链接提供了解决方案,但没有解释小部件导致问题的原因。这里

您需要返回
根视图
,而不是新的

return inflater.inflate(R.layout.fragment_one, container, false);
应该如此

return rootview;
返回充气机。充气(R.layout.fragment_-one,容器,假)
将创建并返回一个新视图,而不是您创建的视图,因此新视图中不会有任何初始化的
popupmenu
对象

因此,您的代码将是

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootview = inflater.inflate(R.layout.fragment_one, container,false);

    ImageButton popupButton = (ImageButton)rootview.findViewById(R.id.chineseTelevision);

    popupButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

        PopupMenu popupMenu = new PopupMenu(getActivity().getApplicationContext(), v);
        popupMenu.inflate(R.menu.menu_main);
        popupMenu.show();

    }
  });
  return rootview;
}

对于这个问题,实际上我建议您管理“onclick from”活动,您可以创建一个接口,允许通过该活动进行传播,更干净。

感谢您的解释,我现在更了解返回哪个视图。代码运行时没有出现任何错误,但单击ImageButton时,出现了此错误
android.view.InflateException:Binary XML文件行#17:无法解析索引6处的属性:TypedValue{t=0x3/d=0x486“res/drawable/ic_menu_moreoverflow_material.XML“a=1 r=0x10803d6}
这是一些资源问题,我用我的代码和解决方案尝试了你的代码,效果很好,只要确保您的
主题
菜单xml
文件没有问题,尽管对我来说似乎是
主题
问题,尝试清理并运行在谷歌搜索后,我发现您的解决方案后的错误是弹出窗口小部件问题。这是一个例子,以防有人和我遇到同样的问题。我已经标记了您的解决方案,谢谢Paveneet。@wuck我很高兴您已经完成了,请继续:)
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootview = inflater.inflate(R.layout.fragment_one, container,false);

    ImageButton popupButton = (ImageButton)rootview.findViewById(R.id.chineseTelevision);

    popupButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

        PopupMenu popupMenu = new PopupMenu(getActivity().getApplicationContext(), v);
        popupMenu.inflate(R.menu.menu_main);
        popupMenu.show();

    }
  });
  return rootview;
}