я включил ShareActionProvider
и я получаю эту ошибку:Android java.lang.NoSuchMethodError ошибка: android.view.MenuItem.getActionProvider
java.lang.NoSuchMethodError: android.view.MenuItem.getActionProvider
Но, как я использовать этот класс, как это:
// SHARING ONLY ENABLED in SDK 14 which is Ice Cream Sandwich
try
{
if (android.os.Build.VERSION.SDK_INT >= 14)
{
Button share = (Button)findViewById(R.id.share_button);
share.setOnClickListener(new Button.OnClickListener()
{
public void onClick(View v)
{
openOptionsMenu();
}
});
}
else
{
// HIDE THE TWO PAGE ELEMENTS
Button share = (Button)findViewById(R.id.share_button);
TextView share_prompt = (TextView)findViewById(R.id.share_prompt);
share.setVisibility(View.GONE);
share_prompt.setVisibility(View.GONE);
}
}
catch (Exception e)
{
}
Так что я думал, что не буду показывать кнопку совместного доступа для более ранних sdk, и я буду в порядке. Но я получаю много аварий.
Я не могу это проверить, потому что у меня нет телефона с более ранней версией SDK. Но означает ли это, что эти страницы вылетают для всех, у кого есть более ранняя версия SDK? Или просто люди, которые нажимают кнопку? Как предотвратить эту ошибку?
И у меня есть эти методы в классе. Должен ли я просто не запускать их, если sdk меньше 14?
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.layout.menu, menu);
MenuItem item = menu.findItem(R.id.menu_item_share);
myShareActionProvider = (ShareActionProvider)item.getActionProvider();
myShareActionProvider.setShareHistoryFileName(
ShareActionProvider.DEFAULT_SHARE_HISTORY_FILE_NAME);
myShareActionProvider.setShareIntent(createShareIntent());
return true;
}
private Intent createShareIntent()
{
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT,
"Some text");
return shareIntent;
}
// Somewhere in the application.
public void doShare(Intent shareIntent)
{
// When you want to share set the share intent.
myShareActionProvider.setShareIntent(shareIntent);
}
Спасибо. Alex
Что делать, если я завершу вызов в try/catch? – Genadinik
, если вы используете actionbarsherlock, вам не нужен блок try/catch. просто не забудьте включить shareactionprovider из библиотеки abs, а не android. это все. – hardartcore