Ниже код для моего Действия
import android.app.Activity;
import android.os.Bundle;
import android.support.v7.widget.ShareActionProvider;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity extends Activity {
private ShareActionProvider shareAction;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
MenuItem item = menu.getItem(R.id.menu_settings);
shareAction = (ShareActionProvider) item.getActionProvider();
return true;
}
}
Проблема состоит в том, что существует ошибка броска от ActionProvider до ShareActionProvider. То, почему это так ниже, является activity_menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_settings"
android:orderInCategory="100"
android:showAsAction="always"
android:title="@string/menu_settings"
android:actionProviderClass="android.widget.ShareActionProvider"
/>
</menu>
Ни одно из решений здесь не решило мою проблему с ShareActionProvider, не бросив / возврат пустого указателя. Я закончил тем, что заменил ShareActionProvider только с Намерением. SEND_ACTION для добавления изображений в моем приложении, как представленный в учебном руководстве Разработчиков Android: https://developer.android.com/training/sharing/send
, Хотя Google упоминает в этом учебном руководстве что:
Note: The best way to add a share action item to an ActionBar is to use ShareActionProvider, which became available in API level 14. ShareActionProvider is discussed in the lesson about Adding an Easy Share Action.
я нашел намного более простым реализовать просто Намерение. SEND_ACTION. Не уверенный, если существуют другие причины реализовать ShareActionProvider...
Это спросили несколько лет назад, таким образом, существующие ответы, вероятно, работали тогда. Однако во время этого написания предложенного кода дает много предупреждений депрекации, и это не решает проблему.
я действительно в конечном счете решал проблему, и она не была зарегистрирована нигде в сети (что я мог найти), таким образом, надо надеяться, этот ответ поможет людям, которые в настоящее время сталкиваются с этой той же проблемой.
решение для меня было в операторе импорта. Когда я использовал SharedActionProvider впервые, Studio Android может добавить импорт автоматически. Это предоставляет две возможности для того, что импортировать: android.widget.ShareActionProvider
и androidx.appcompat.widget.ShareActionProvider
.
Первый повреждается и приводит к ошибке о броске, никогда не успешно выполняющемся. Последний заставит все работать правильно. app:ActionProviderClass
в файле меню должно быть идентично импортированному имени файла.