Невозможно передать Поставщик действия поставщику действия

Ниже приведен код моей деятельности

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

     

У меня была та же проблема, и я нашел решение:

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)); } 
  • Невозможно написать файл кеша jarlist при создании проекта Android
  • Проблема с эмулятором в Android
  • Должны ли мы использовать RecyclerView для замены ListView?
  • android.view.InflateException: двоичная строка XML-файла # 12: ошибка раздувания classа
  • Android - Съемка фотографий и сохранение их с помощью специального имени в пользовательское место назначения через Intent
  • Обработчик против AsyncTask vs Thread
  • Какую технику хранения данных Android использовать?
  • Android - предотrotation перезагрузки WebView при повороте
  • Учитывая имя плейлиста для Android, как можно найти песни в плейлисте?
  • Где Android-эмулятор хранит базу данных SQLite?
  • Android получит локализацию устройства
  • Interesting Posts

    Как я могу переключить перенос слов в Visual Studio?

    Как программно предотвратить переключение Mac на hibernate?

    Как проверить тип переменной в Java?

    Как можно добавить разделительную линию в Android RecyclerView?

    Быстрые трансцендентные / тригонометрические функции для Java

    Не удалось экспортировать переменную через файл сценария

    Расположение файла фонового экрана начального экрана Windows 8.1

    Сделать Windows 10 автоматически прекратить установку драйверов

    как использовать HSL в Asp.net

    Есть ли способ заблокировать все расширения на некоторых вкладках в Chrome?

    Как включить / отключить уровни журналов в Android?

    mongodb.conf bind_ip = 127.0.0.1 не работает, но 0.0.0.0 работает

    Какое программное обеспечение для удаленного рабочего стола требует минимальной конфигурации на стороне клиента?

    Предложения для отладки таблиц стилей печати?

    Перенаправление / сохранение вывода оболочки в переменную GDB?

    Давайте будем гением компьютера.