android - 上下文菜单不显示

标签 android contextmenu

我有这个方法:

void showAllSongsMenu() {
    if (rebuilding) {
        Toast.makeText(MusicPlayerActivity.this,
                "Database rebuild in progress, please wait!",
                Toast.LENGTH_SHORT).show();
        return;
    }
    LayoutInflater layoutInflater = (LayoutInflater) getBaseContext()
            .getSystemService(LAYOUT_INFLATER_SERVICE);
    final View popupView = layoutInflater.inflate(R.layout.allsongs_list,
            null);
    allSongs = new PopupWindow(popupView, LayoutParams.FILL_PARENT,
            LayoutParams.FILL_PARENT, true);
    Button allSongsMenu = (Button) allSongs.getContentView().findViewById(
            R.id.close_all_songs_menu);
    allSongs.setBackgroundDrawable(MusicPlayerActivity.this.getResources()
            .getDrawable(R.drawable.unknown_artist));
    allSongs.setFocusable(true);
    allSongsMenu.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            allSongs.dismiss();
        }

    });
    ListView lv = (ListView) allSongs.getContentView().findViewById(
            R.id.all_songs_list);
    //registerForContextMenu(lv);
    lv.setOnCreateContextMenuListener(new OnCreateContextMenuListener(){

        @Override
        public void onCreateContextMenu(ContextMenu menu, View v,
                ContextMenuInfo menuInfo) {
            menu.setHeaderTitle("Song options");
            menu.add(0, v.getId(), 0, "enqueue song");
            menu.add(0, v.getId(), 0, "song info");
            menu.add(0, v.getId(), 0, "cancel action");
        }});
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            currentTrack = arg2;
            loadTrack();
            if (isTuning)
                if (track != null)
                    track.pause();
            isTuning = true;
            btnPlay.setBackgroundResource(R.drawable.pause);
            playTrack();
            allSongs.dismiss();
        }

    });
    base.getAllData();
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            R.layout.simple_row, base.getNames());
    lv.setAdapter(adapter);
    allSongs.showAtLocation(trackInfo, Gravity.CENTER, 0, -30);
}

上下文菜单未显示。我也实现了 onContextItemSelected 但它不起作用,因为没有显示菜单。每当我需要此 PopupWindow 时都会调用此方法,并且它会作为选项之一从 OptionsMenu 中调用。我还尝试在没有监听器的情况下为上下文菜单事件注册 ListView ,但它也没有用。

最佳答案

我相信你必须为上下文菜单注册你的 ListView

registerForContextMenu(lv);

你注释掉了

编辑:

您还缺少打开上下文菜单的代码:

openContextMenu(view);

应该放在某些事件上,例如按钮点击

编辑2:

您实际上可以从另一个对话 fragment 开始一个对话 fragment ,这将简化您的编码。示例如下:

Activity 代码:

public class MyActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Button button = new Button(this);
        button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                new Test1().show(getSupportFragmentManager(),"bla");
            }
        });
        setContentView(button);
    }

}

第一个对话 fragment :

public class Test1 extends DialogFragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        Button button = new Button(getActivity());
        button.setText("test1");
        button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                new Test2().show(getActivity().getSupportFragmentManager(),"bla");
            }
        });
        return button;
    }

}

第二个对话 fragment :

public class Test2 extends DialogFragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        Button button = new Button(getActivity());
        button.setText("test2");
        button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                dismiss();
            }
        });
        return button;
    }
}

关于android - 上下文菜单不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19445613/

相关文章:

objective-c - 上下文菜单中的自定义条目

java - If else 条件和逻辑运算符

android - 自动连接BLE设备[Android]

java - Java 中的内存分配 - Android

android - 如何折叠 "child activities"?

javascript - Chrome 上下文菜单子(monad)项功能同时启动

eclipse - 如何使用org.eclipse.ui.menus向Eclipse Package Explorer上下文菜单项添加子菜单项?

android - 在 Xamarin BaseAdapter 中寻找清除方法

javascript - 使用 Jquery 上下文菜单

python - 子菜单项不调用函数 [有工作解决方案]