Android 如何从片段中创建弹出菜单?

Android 如何从片段中创建弹出菜单?,android,android-layout,android-fragments,android-menu,Android,Android Layout,Android Fragments,Android Menu,我在viewpager片段中有一个listView。在listview中,我想在单击imagebutton时创建一个弹出菜单。这是我的密码: @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View myFragmentView = inflater.inflate(R.layout.songs, cont

我在viewpager片段中有一个listView。在listview中,我想在单击imagebutton时创建一个弹出菜单。这是我的密码:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    final View myFragmentView = inflater.inflate(R.layout.songs, container, false);
    nAdapter = new SongsAdapter(getActivity(), null);
    setListAdapter(nAdapter);

    final ImageButton ex_menu = (ImageButton) myFragmentView.findViewById(R.id.expanded_menu);
    ex_menu.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            //Creating the instance of PopupMenu
            PopupMenu popup = new PopupMenu(getActivity().getApplicationContext(), ex_menu);
            //Inflating the Popup using xml file
            popup.getMenuInflater().inflate(R.menu.songitem_menu, popup.getMenu());

            //registering popup with OnMenuItemClickListener
            popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                public boolean onMenuItemClick(MenuItem item) {
                    switch (item.getItemId()) {
                        case R.id.one:
                            Log.i("ContextMenu", "Item 1a was chosen");
                            return true;
                        case R.id.two:
                            Log.i("ContextMenu", "Item 1b was chosen");
                            return true;
                        case R.id.three:
                            Log.i("ContextMenu", "Item 1b was chosen");
                            return true;
                        case R.id.four:
                            Log.i("ContextMenu", "Item 1b was chosen");
                            return true;
                        case R.id.five:
                            Log.i("ContextMenu", "Item 1b was chosen");
                            return true;
                    }
                    return true;
                }
            });

            popup.show();//showing popup menu
        }
    });

    return myFragmentView;
}
这是来自logcat的错误消息

java.lang.NullPointerException
        at com.screens.Songs.onCreateView(Songs.java:52)
        at android.support.v4.app.Fragment.performCreateView(Fragment.java:1789)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:955)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138)
        at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:740)
        at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501)
        at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:490)
        at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
        at android.support.v4.view.ViewPager.populate(ViewPager.java:1072)
        at android.support.v4.view.ViewPager.populate(ViewPager.java:918)
        at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1440)
        at android.view.View.measure(View.java:16838)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:926)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:607)
        at android.view.View.measure(View.java:16838)
        at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:868)
        at android.view.View.measure(View.java:16838)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5374)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:340)
        at android.support.v7.internal.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:124)
        at android.view.View.measure(View.java:16838)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5374)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1621)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:742)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:607)
        at android.view.View.measure(View.java:16838)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5374)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:340)
        at android.view.View.measure(View.java:16838)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5374)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1621)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:742)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:607)
        at android.view.View.measure(View.java:16838)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5374)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:340)
        at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2332)
        at android.view.View.measure(View.java:16838)
        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2252)
        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1315)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1513)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1192)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6231)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:788)
        at android.view.Choreographer.doCallbacks(Choreographer.java:591)
        at android.view.Choreographer.doFrame(Choreographer.java:560)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:774)
        at android.os.Handler.handleCallback(Handler.java:808)
        at android.os.Handler.dispatchMessage(Handler.java:103)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:5292)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
        at dalvik.system.NativeStart.main(Native Method)

此外,我想知道如何从另一个弹出菜单创建一个弹出菜单。也就是说,当我点击一个菜单项时,会出现另一个菜单。如何做到这一点?

从另一个弹出菜单中创建弹出菜单是一个更简单的概念。创建弹出窗口的过程与创建弹出窗口的过程相同,但在
onMenuItemClickListener()方法中。

Thaks。你能告诉我上面的代码有什么问题吗。为什么它没有编译?