У меня есть ListView в моей деятельности. При длинном нажатии этого списка, у меня открыта контекстная панель действий. Он имеет опцию Share для совместного использования выбранных элементов в списке (можно выбрать несколько элементов) через gmail/whatsapp/etc.Как делиться несколькими файлами с помощью ShareActionProvider в контекстной панели действий?
<item android:id="@+id/menu_share" android:title="Share" android:icon="@android:drawable/ic_menu_share" android:actionProviderClass="android.widget.ShareActionProvider" app:showAsAction="ifRoom" />
это мой опционной в файле макета меню.
У меня есть класс, реализующий ActionMode.Callback для обработки контекстной панели действий и ее значков.
Я инициализировал объект ShareActionProvider внутри переопределения onCreateActionMode(ActionMode mode, Menu menu)
для пункта меню «Общий доступ».
mShareActionProvider = (ShareActionProvider) menuItem.getActionProvider();
Мой просмотр списка состоит из имен файлов. Мое требование состоит в том, что, если пользователь выбирает несколько элементов в представлении списка (сначала нажмите и затем нормальное нажатие для последующего выбора), я должен иметь возможность обмениваться всеми этими файлами.
Я использую нижеследующее для такого намерения (все файлы, соответствующие именам файлов в списке, являются файлами аудио-amr).
Intent shareIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM,uriList);
shareIntent.setType("audio/AMR");
Здесь uriList является ArrayList of Uris. Теперь, где я должен назвать метод mShareActionProvider.setShareIntent(intent);
?
Я не могу назвать это в onCreateActionMode(ActionMode mode, Menu menu)
, потому что пользователь может выбрать еще несколько элементов в списке после первого длительного нажатия.
Если я вызываю его непосредственно в onActionItemClicked(ActionMode mode, MenuItem item)
, значок «Мой Share» кажется неактивным.
Если я назову его как в onCreateActionMode(ActionMode mode, Menu menu)
, так и в onActionItemClicked(ActionMode mode, MenuItem item)
с использованием того же намерения, намерение долевого участия, похоже, не обновляется. Просьба помочь ..
Невозможно ли достичь этого ShareActionProvider без использования MultichoiceModeListener и его OnItemCheckedStateChanged()? Потому что я достиг нескольких элементов «Удалить», используя только ActionMode.CallBack, а не MultiChoiceModeListener. –
Спасибо, я смог получить то, что я хотел, используя MultichoiceModeListener для списка и создав новый Intent в onItemCheckedStateChanged() и установив это как ShareIntent объекта ShareActionProvider. –