在 android 中自定义 RecyclerView 上的溢出菜单
Customizing Overflow menu on a RecyclerView in android
我正在关注与此类似的项目: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>
弹出菜单正常显示,没有任何问题。
现在的问题是:
点击下载我想隐藏 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 是图像(垂直三点)。
试试这个:
popup.getMenu().getItem(0).setVisible(false);
获取 Menu 的实例并获取第一项并使其成为 visible/invisible。
您似乎永远不会同时显示 "download" 和 "cancel download" 项。那么为什么不制作两个单独的菜单布局,并通过保持下载过程的状态在正确的菜单布局上膨胀。如果正在进行下载,只需使用 "cancel download" 项填充布局,如果没有下载,则使用 "download" 项填充布局。
<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();
}
}
我正在关注与此类似的项目: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>
弹出菜单正常显示,没有任何问题。
现在的问题是:
点击下载我想隐藏 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 是图像(垂直三点)。
试试这个:
popup.getMenu().getItem(0).setVisible(false);
获取 Menu 的实例并获取第一项并使其成为 visible/invisible。
您似乎永远不会同时显示 "download" 和 "cancel download" 项。那么为什么不制作两个单独的菜单布局,并通过保持下载过程的状态在正确的菜单布局上膨胀。如果正在进行下载,只需使用 "cancel download" 项填充布局,如果没有下载,则使用 "download" 项填充布局。
<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();
}
}