2013-09-26 2 views
5

Я использую ActionBarSherlock в моем проекте, и вы хотите установить кнопку Отправить, чтобы опубликовать информацию в FB и т.д. и т.п. ... Я добился того, что таким образом: Adding items to action bar (using ActionBarSherlock)Удалить дополнительный значок в ActionBar (при использовании ShareActionProvider и ActionBarSherlock)

Как вы можете знать, ShareActionProvider добавляет второй значок с наиболее используемым вариантом для совместного использования. Это означает, что в моей панели действий появляется значок другого приложения, и я хочу предотвратить это поведение ... Я видел 2 возможных решения для этого, и, к сожалению, оба не работали со мной:/

Первая попытка был в моем целевом классе для реализации OnShareTargetSelectedListener и переопределения метода onShareTargetSelected (например, здесь: ActionBarSherlock - Share Content icon issue). Но дополнительный значок остается там ... вот мой код:

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    getSupportMenuInflater().inflate(R.menu.share, menu); 
    mShareActionProvider = (ShareActionProvider) menu.findItem(R.id.share).getActionProvider(); 
    Intent intent = getDefaultShareIntent(); 
    mShareActionProvider.setOnShareTargetSelectedListener(this); 
    if(intent!=null) 
     mShareActionProvider.setShareIntent(intent); 
    return super.onCreateOptionsMenu(menu); 
} 

@Override 
public boolean onShareTargetSelected(ShareActionProvider source, 
            Intent intent) { 
    this.startActivity(intent); 
    // started activity ourself to prevent search history 
    return true; 
} 

Вторая попытка была переписать некоторые классы из ActionBarSherlock, чтобы предотвратить его показ дополнительный значок (например, здесь: How to hide the share action (which use most) icon near the share action provider?). Но у меня проблемы с этим решением, так как я не смог импортировать com.actionbarsherlock.widget.ActivityChooserModel из своих пользовательских классов (заблокирован для внешних пакетов). Даже копирование этого класса в мой пакет, это не сработало (сбой приложений) ...

Похоже, что это обычная вещь, чтобы отключить эту дополнительную иконку, но я не мог понять, почему решения выше не " т работал со мной ...

заранее спасибо за любые идеи и sugestions

+0

Ваше второе решение - это подход, который я бы рекомендовал. «Даже копируя этот класс в мой пакет, он не работал (сбой приложений)» - используйте LogCat для проверки трассировки стека Java, связанной с вашим сбоем. «Похоже, это довольно обычная вещь, чтобы отключить эту дополнительную иконку», - и ваше доказательство этого ... что именно? – CommonsWare

ответ

3

я не знаю, если вы решили свою проблему, но у меня была такая же проблема, чтобы удалить историю ShareActionProvider. Я пробовал все, и ближайший ответ, который я нашел, был таким же, как и вы (How to hide the share action icon?).
После некоторых исследований, я нашел этот трюк на второй комментарий:
Action Bar Sherlock has depreciated methods

  1. Копировать/Вставить из ABS в 3 классов (ShareActionProvider, ActivityChooserView и ActivityChooverModel) к вашему пакету.
  2. Замените импорт на свой собственный пакет.
  3. Измените строку if (activityCount > 0 && historySize > 0) на if (false) в вашем новом ActivityChooserView.
    (вы получите сообщение об ошибке: «setActived» недоступно для вашей текущей версии)
  4. Сохраните его и закройте.
  5. Заменить класс в вашем menu.xml вашей деталь android:actionProviderClass="com.myapp.ShareActionProvider"
  6. в вашем Manifest, сделать minSdkVersion равно 11. Сохраните ваш проект. Убери это.
  7. Возвратитесь к Manifest, замените свой minSdkVersion на старый, который вы использовали. Сохраните и очистите.

Он отлично работает. Дайте мне знать, разрешил ли этот вопрос вашу проблему.

+0

, делая то же самое, я получаю ошибку в ShareActionProvider расширяет ActionProvider ?? как исправить это –

+0

Какова точная ошибка, которую вы получаете, @KingofMasses? Возможно, вам нужно отправить связанный с этим вопрос и объяснить больше своей проблемы. – Fllo

+0

actully Я не могу импортировать com.android.internal.R; .. Любая помощь? @Fllo Моя цель - не публиковать вопрос, я хочу проследить его! –

0

1) Выше решение FLLO Точно работает для меня, а также 2) вы можете просто импортировать библиотеку ActionbarSherlock и использовать ее, чтобы не было необходимости редактировать код, подобный упомянутому выше. Но моя точка зрения лучше идти с решением 1) ....Поскольку в последней версии они использовали ActionBarCompat

Смежные вопросы