Невозможно передать Поставщик действия поставщику действия
Ниже приведен код моей деятельности
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
- Как узнать, подключен ли Wi-Fi на Android?
- Намерение службы должно быть явным: намерение
- На Android сделайте запрос POST с данными URL-кодированной формы без использования UrlEncodedFormEntity
- java.lang.ClassNotFoundException в рабочем приложении
- FFmpeg на Android
- Ошибка java Lang UnsupportedClassVersion в Xamarin Studio
- Intent putExtra ArrayList
- Что лучше? notifyDataSetChanged или notifyItemChanged в цикле?
- Как получить последнюю запись от Sqlite?
- Как изменить шрифт в TextView?
- Android getMeasuredHeight возвращает неправильные значения!
- Как интерпретировать Logcat
- Как включить функцию AutoStart для моего приложения в приложении безопасности Xiaomi Security App программно в android
У меня была та же проблема, и я нашел решение:
1) Вы должны использовать:
2) и в Java
import android.support.v7.widget.ShareActionProvider;
а также
// Locate MenuItem with ShareActionProvider MenuItem item = menu.findItem(R.id.menu_share); // Fetch and store ShareActionProvider mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(item);
меню:
Ява:
MenuItem menuItem = menu.findItem(R.id.action_share); mActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(menuItem);
Вы используете android.widget.ShareActionProvider
, который предназначен для панели действий API уровня 11+. Если вы используете резервный порт AppCompat на панели действий, вместо этого вам необходимо использовать android.support.v7.widget.ShareActionProvider
.
Я столкнулся с этой проблемой, следуя инструкциям панели действий Android android, и это в основном то, что вы делаете. После того, как вы пробрались в образцы, которые используют панель действий, используя обратные совместимые библиотеки поддержки v7 и v4, я закончил использовать следующий код для onCreateOptionsMenu ().
@Override public boolean onCreateOptionsMenu(Menu menu) { File file = new File(mFilePath); ShareCompat.IntentBuilder b = ShareCompat.IntentBuilder.from(this) .setType("image/png") .setStream(Uri.fromFile(file)); MenuItem item = menu.add("Share"); ShareCompat.configureMenuItem(item, b); MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_IF_ROOM); return true; }
Несколько вещей, которые нужно отметить здесь, это то, что вы не надуваетесь из ресурса меню. В меню добавлена кнопка совместного использования по умолчанию. Вам просто нужно указать, какой тип ресурса вы используете с .setType. Поскольку я делюсь файлом, мне нужно setStream, с Uri.fromFile (new File ()); Если вы делились текстом, вы бы установилиType («text / plain»).
Также убедитесь, что вы импортировали проект $ SDK \ extras \ android \ support \ v7 \ appcompat library, который содержит необходимые пакеты. Кроме того, поскольку они импортировали этот проект библиотеки, вашему проекту не нужен v4support.jar в папке libs, потому что проект библиотеки уже имеет его.
Проблема заключалась в том, что то, что @CommonsWare говорит о том, что не использует библиотеку поддержки ShareActionProvider, и даже если бы я это сделал, она также не сработала, потому что при использовании библиотеки поддержки нам нужны пользовательские префиксы для некоторых действий, таких как showAsAction
Следуйте простому правилу, которое я нашел полезным
Используя AppCompatActivity
,
Вы также можете заменить поддержку: actionProviderClass с приложением: actionProviderClass и поддержкой: showAsAction с приложением: showAsAction
В вашем onCreateOptionsMenu ()
@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu resource getMenuInflater().inflate(R.menu.main_menu, menu); // Retrieve the share menu item MenuItem shareItem = menu.findItem(R.id.menu_share); // Now get the ShareActionProvider from the item mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(shareItem); //set its ShareIntent. setShareIntent(shareIntent); return super.onCreateOptionsMenu(menu); }
Используя Activity
,
В вашем onCreateOptionsMenu()
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.actions, menu); ShareActionProvider share= (ShareActionProvider)menu.findItem(R.id.share) .getActionProvider(); share.setShareIntent(shareIntent); return(super.onCreateOptionsMenu(menu)); }