无法单击 ActionBar 上的 MenuItem
MenuItem on ActionBar can't be clicked
我正在尝试实现共享图像的共享意图。我有一个扩展 ActionBarActivity 的全屏 activity 和一个实现沉浸模式的片段,如 android 开发人员指南所述,因此用户可以全屏查看图像。问题是,即使我可以在ActionBar 上看到共享图标,但似乎无法单击它,显然是因为从未调用过onOptionsItemSelected 方法。
这是 onCreateOptionsMenu:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_share, menu);
return true;
}
onOptionsItemSelected:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle presses on the action bar items
switch (item.getItemId()) {
case R.id.menu_share:
Intent i = getIntent();
uriString = i.getStringExtra("uri");
if(uriString != null) {
Uri uri = Uri.parse(uriString);
mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(item);
mShareActionProvider.setShareIntent(createShareIntent(uri));
}
return true;
default:
return super.onOptionsItemSelected(item);
}
}
这是我创建的用于准备和启动意图的方法:
private Intent createShareIntent(Uri uri) {
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
shareIntent.setType("image/*");
startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.share_image)));
return shareIntent;
}
menu_share.xml:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/menu_share"
android:title="Share"
app:showAsAction="ifRoom"
android:icon="@drawable/abc_ic_menu_share_mtrl_alpha"
app:actionProviderClass="android.support.v7.widget.ShareActionProvider"
/>
</menu>
我尝试了不同的方法,例如使用 setOnMenuItemClickListener
或考虑监听器的类似方法,但我发现在调试时这些监听器被忽略了。我也在此处和其他网站上搜索了解决方案,但我不知道如何解决这个问题,所以任何想法都将不胜感激。
提前致谢!
你膨胀错误的菜单。由于您的菜单文件名为 menu.xml
,因此您应该执行
getMenuInflater().inflate(R.menu.menu, menu);
您不直接膨胀条目,而是菜单。
也在你下面
switch (item.getItemId()) {
case R.id.menu_share:
写:Log.d("mytag", "share menu clicked");
然后你可以在你的 android logcat 中验证菜单点击没有问题,但是你收到的 Intent 是这样的。
最终,我改变了解决问题的方法,现在我可以调用 onOptionsItemSelected(MenuItem item)
方法并将我的应用程序中的图像分享给其他人。我把代码放在下面。
onCreateOptionsMenu(菜单菜单):
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menuItem = menu.add(Menu.NONE, R.id.action_share, Menu.NONE, R.string.action_share);
menuItem.setIcon(R.drawable.abc_ic_menu_share_mtrl_alpha);
menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
mShareActionProvider = new ShareActionProvider(this);
return true;
}
onOptionsItemSelected(菜单项):
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_share:
Intent i = getIntent();
uriString = i.getStringExtra("uri");
if (uriString != null) {
Uri uri = Uri.parse(uriString);
MenuItemCompat.setActionProvider(item, mShareActionProvider);
createShareIntent(uri);
return true;
}
default:
return super.onOptionsItemSelected(item);
}
}
我点击右侧菜单项时创建分享意图的方法:
private void createShareIntent(Uri uri) {
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
shareIntent.setType("image/*");
if (mShareActionProvider != null) {
mShareActionProvider.setShareIntent(shareIntent);
}
}
项目的 id 在值文件夹中 ids.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item type="id" name="action_share"/>
</resources>
strings.xml:
<!-- Actions -->
<string name="action_share">Share image</string>
如您所见,我不再使用 getMenuInflater().inflate(int menuRes, Menu menu)
,但我使用 add()
方法生成我的菜单,它对我有用。
我正在尝试实现共享图像的共享意图。我有一个扩展 ActionBarActivity 的全屏 activity 和一个实现沉浸模式的片段,如 android 开发人员指南所述,因此用户可以全屏查看图像。问题是,即使我可以在ActionBar 上看到共享图标,但似乎无法单击它,显然是因为从未调用过onOptionsItemSelected 方法。
这是 onCreateOptionsMenu:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_share, menu);
return true;
}
onOptionsItemSelected:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle presses on the action bar items
switch (item.getItemId()) {
case R.id.menu_share:
Intent i = getIntent();
uriString = i.getStringExtra("uri");
if(uriString != null) {
Uri uri = Uri.parse(uriString);
mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(item);
mShareActionProvider.setShareIntent(createShareIntent(uri));
}
return true;
default:
return super.onOptionsItemSelected(item);
}
}
这是我创建的用于准备和启动意图的方法:
private Intent createShareIntent(Uri uri) {
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
shareIntent.setType("image/*");
startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.share_image)));
return shareIntent;
}
menu_share.xml:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/menu_share"
android:title="Share"
app:showAsAction="ifRoom"
android:icon="@drawable/abc_ic_menu_share_mtrl_alpha"
app:actionProviderClass="android.support.v7.widget.ShareActionProvider"
/>
</menu>
我尝试了不同的方法,例如使用 setOnMenuItemClickListener
或考虑监听器的类似方法,但我发现在调试时这些监听器被忽略了。我也在此处和其他网站上搜索了解决方案,但我不知道如何解决这个问题,所以任何想法都将不胜感激。
提前致谢!
你膨胀错误的菜单。由于您的菜单文件名为 menu.xml
,因此您应该执行
getMenuInflater().inflate(R.menu.menu, menu);
您不直接膨胀条目,而是菜单。
也在你下面
switch (item.getItemId()) {
case R.id.menu_share:
写:Log.d("mytag", "share menu clicked");
然后你可以在你的 android logcat 中验证菜单点击没有问题,但是你收到的 Intent 是这样的。
最终,我改变了解决问题的方法,现在我可以调用 onOptionsItemSelected(MenuItem item)
方法并将我的应用程序中的图像分享给其他人。我把代码放在下面。
onCreateOptionsMenu(菜单菜单):
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menuItem = menu.add(Menu.NONE, R.id.action_share, Menu.NONE, R.string.action_share);
menuItem.setIcon(R.drawable.abc_ic_menu_share_mtrl_alpha);
menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
mShareActionProvider = new ShareActionProvider(this);
return true;
}
onOptionsItemSelected(菜单项):
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_share:
Intent i = getIntent();
uriString = i.getStringExtra("uri");
if (uriString != null) {
Uri uri = Uri.parse(uriString);
MenuItemCompat.setActionProvider(item, mShareActionProvider);
createShareIntent(uri);
return true;
}
default:
return super.onOptionsItemSelected(item);
}
}
我点击右侧菜单项时创建分享意图的方法:
private void createShareIntent(Uri uri) {
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
shareIntent.setType("image/*");
if (mShareActionProvider != null) {
mShareActionProvider.setShareIntent(shareIntent);
}
}
项目的 id 在值文件夹中 ids.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item type="id" name="action_share"/>
</resources>
strings.xml:
<!-- Actions -->
<string name="action_share">Share image</string>
如您所见,我不再使用 getMenuInflater().inflate(int menuRes, Menu menu)
,但我使用 add()
方法生成我的菜单,它对我有用。