Как я могу получить свой ShareActionProvider для отправки текста динамически (от слушателей) просмотра пейджеров и т. д.
Я использую панель действий библиотеки Шерлока, которая похожа на панели действий ICS, вот где я застрял
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add("Save")
.setIcon(R.drawable.ic_compose).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
menu.add("Search")
.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
SubMenu sub = menu.addSubMenu("Options");
sub.add(0, SubMenu.NONE, 0, "First");
sub.add(0,SubMenu.NONE, 1, "Second");
sub.add(0, SubMenu.NONE, 2, "Three");
sub.getItem().setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
// HERE IS WHere I AM FACING PROBLEM IN
getSupportMenuInflater().inflate(R.menu.share_action_provider, menu);
// Set file with share history to the provider and set the share intent.
actionItem = menu.findItem(R.id.menu_item_share_action_provider_action_bar);
ShareActionProvider actionProvider = (ShareActionProvider) actionItem.getActionProvider();
actionProvider.setShareHistoryFileName(ShareActionProvider.DEFAULT_SHARE_HISTORY_FILE_NAME); //this is BRILLIANT WAY TO AVOID REPEATation
actionProvider.setShareIntent(createShareIntent());
return super.onCreateOptionsMenu(menu);
}
private Intent createShareIntent() {
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
//THIS TEXT IS WHAT I WANT TO OBTAIN DYNAMICALLY
shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Something goes here");
return shareIntent;
}
Всякий раз, когда я пытаюсь положить actionProvider.setShareIntent(createShareIntent());
внутри слушателя или в любом другом месте, кроме actionProvider.setShareIntent(createShareIntent());
я получил D/View(11753): onTouchEvent: viewFlags is DISABLED
Я хочу включить этого провайдера совместного использования и хочу ввести свой собственный текст, который генерируется на входах пользователей.
Любые материалы приветствуются.
Добавление этого не работает
actionItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
Log.e("THIS IS NEVER CALLED", "??");
return true;
}
});
Как получить обновление для кнопки "Поделиться"
2 ответа
Я столкнулся с аналогичной проблемой с производной android.support.v7.app.ActionBarActivity (хотя я думаю, что этот подход должен работать для любой активности), и я переопределил onPrepareOptionsMenu и получил эффект, который вы получили после:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
ShareActionProvider actionProvider = (ShareActionProvider) actionItem.getActionProvider();
if (actionProvider != null) {
actionProvider.setShareIntent(createShareIntent());
}
return super.onPrepareOptionsMenu(menu);
}
Я использую меню, как это:
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.your_share_button_name:
share();
return true;
}
}
private void share() {
Intent sharingIntent = new Intent(Intent.ACTION_SEND);
sharingIntent.setType("text/plain");
sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT,
"your text");
sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,
"your subject");
startActivity(Intent.createChooser(sharingIntent, "Share using"));
}
это все. Я предлагаю вам поместить весь макет меню в XML в папке res/menu.