0

我正在关注一个类似的项目: http ://www.javatpoint.com/android-popup-menu-example

我在我的 recyclerView 中为每个项目创建了溢出菜单。菜单正确出现。我创建了名为“下载”的菜单项,以及另一个名为“取消下载”的菜单项。像这样的东西:

popup.xml(菜单文件夹内)

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/video_download"
        android:title="Download"/>

    <item
        android:id="@+id/video_download_cancel"
        android:title="Cancel Download"
        android:visible="false"/>
</menu>

弹出菜单正常显示,没有任何问题。

现在的问题是:

OnClick of Download 我想隐藏video_download和video_download_cancel可见。

这可能吗?

这是我创建的溢出菜单(三个垂直点)的点击事件:

personViewHolder.video_menu.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                final PopupMenu popup = new PopupMenu(mContext, v);
                popup.getMenuInflater().inflate(R.menu.popmenu, popup.getMenu());
                popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener()
                {
                    @Override
                    public boolean onMenuItemClick(MenuItem item)
                    {
                        Intent intent = new Intent(mContext, Download_Service.class);
                        intent.putExtra("link", urlstring);
                        mContext.startService(intent);

                        return true;
                    }

                });

                popup.show();
            }
        });

其中 video_menu 是图像(垂直三个点)。

4

2 回答 2

1

似乎您永远不会同时显示“下载”和“取消下载”项目。那么为什么不制作两个单独的菜单布局,并通过保持下载过程的状态来增加正确的菜单布局。如果正在进行下载,只需使用“取消下载”项填充布局,如果没有进行下载,则使用“下载”项填充布局。

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/video_download_cancel"
        android:title="Cancel Download"
        android:visible="false"/>
</menu>

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/video_download"
        android:title="Download"/>
</menu>

这是两个菜单项布局。

personViewHolder.video_menu.setOnClickListener(new MyOnClickListener(this));

private final class MyOnClickListener implements View.OnClickListener {
    private final Context mContext;
    private boolean mDownloading = false;
    public MyOnClickListener(Context context) {
        mContext = context;
    }
    @Override
    public void onClick(View v)
    {
        final PopupMenu popup = new PopupMenu(mContext, v);
        if (mDownloading) {
            popup.getMenuInflater().inflate(R.menu.popmenu_canceldownload, popup.getMenu());
        } else {
            popup.getMenuInflater().inflate(R.menu.popmenu_download, popup.getMenu());
        }
        popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener()
        {
            @Override
            public boolean onMenuItemClick(MenuItem item)
            {
                if (!mDownloading) {
                    Intent intent = new Intent(mContext, Download_Service.class);
                    intent.putExtra("link", urlstring);
                    mContext.startService(intent);

                    MyOnClickListener.this.mDownloading = true;
                } else {
                    // Cancel download
                    MyOnClickListener.this.mDownloading = false;
                }
                return true;
            }
        });
        popup.show();
    }
}
于 2016-03-15T12:19:03.133 回答
1

尝试这个:

popup.getMenu().getItem(0).setVisible(false);

获取 Menu 的实例并获取第一项并使其可见/不可见。

于 2016-03-15T11:39:17.317 回答