アクティビティに ListView があります。そのリスト ビューを長押しすると、コンテキスト アクション バーが開きます。リストで選択したアイテムを共有するための共有オプションがあります (複数のアイテムを選択できます)。
<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 を実装するクラスがあります。
onCreateActionMode(ActionMode mode, Menu menu)
Share メニュー項目のオーバーライド内で ShareActionProvider オブジェクトを初期化しました。
mShareActionProvider = (ShareActionProvider) menuItem.getActionProvider();
リスト ビューはファイル名で構成されています。私の要件は、ユーザーがリストビューで複数のアイテムを選択した場合 (最初に長押ししてから通常のプレスで連続選択)、それらすべてのファイルを共有できる必要があることです。
私はそのような意図のために以下を使用しています(リストビューのファイル名に対応するすべてのファイルはオーディオ - amr ファイルです)。
Intent shareIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM,uriList);
shareIntent.setType("audio/AMR");
ここで、uriList は Uris の ArrayList です。メソッドをどこで呼び出す必要がありmShareActionProvider.setShareIntent(intent);
ますか?
onCreateActionMode(ActionMode mode, Menu menu)
ユーザーが最初の長押しの後にリスト内のいくつかのアイテムを選択する可能性があるため、私はそれを呼び出すことができません。
で直接呼び出すとonActionItemClicked(ActionMode mode, MenuItem item)
、共有アイコンが非アクティブになっているようです。
onCreateActionMode(ActionMode mode, Menu menu)
両方で同じインテントを使用して呼び出すとonActionItemClicked(ActionMode mode, MenuItem item)
、共有インテントが更新されないようです。親切に助けて..