Я пытаюсь реализовать намерение поделиться фотографиями. У меня есть полноэкранная активность, которая расширяет ActionBarActivity и фрагмент, который реализует immersivemode, как объясняет руководство разработчика Android, поэтому пользователь может видеть изображение в полноэкранном режиме. Проблема в том, что даже если я вижу значок share на ActionBar, кажется, что его нельзя щелкнуть, по-видимому, потому, что метод onOptionsItemSelected никогда не вызывается.MenuItem on ActionBar не может быть нажата
Вот 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 вместо menu_share.xml, это настоящее имя моего файла меню. Теперь я редактирую вопрос, спасибо! –
Вам не нужно регистрировать слушателя. Я подозреваю, что ваш uriString возвращает null. После случая R.id.menu_share: напишите Toast.makeText (это, «общее меню щелкнуто», Toast.LENGTH_LONG) .show(); И расскажите, что вы видите. –
Нет, uriString возвращает правильную строку, я уже проверял ее при попытке другого решения и Intent i = getIntent() и uriString = i.getStringExtra ("uri"); были в методе onCreateOptionsMenu (меню). Дело в том, что onOptionsItemSelected (MenuItem menuItem) никогда не вызывается ... Если я поставил точку останова в этом методе, когда я нажимаю на значок общего доступа, отладчик не видит его и ничего не происходит –