2013-05-20 3 views
4

У меня проблемы с ShareActionProvider. Мне нравится делиться текущим URL-адресом webview (URL можно изменять динамически через JS) через ShareActionProvider. Для этого я перезаписал onOptionsItemSelected, чтобы изменить Intent через setShareIntent. Но когда я нажимаю на ShareActionProvider и делюсь им через конкретное приложение, ничего не происходит. Я отлаживал его, и я узнал, что onOptionsItemSelected не запускается. Может кто-нибудь мне помочь?Определите, активирован ли эффект ShareActionProvider

public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.game, menu); 

    MenuItem mShareActionProviderItem = (MenuItem) menu.findItem(R.id.action_share); 
    mShareActionProvider = (ShareActionProvider) mShareActionProviderItem.getActionProvider(); // is a field 
    Intent sendIntent = new Intent(Intent.ACTION_SEND); 
    sendIntent.setType("text/plain"); 
    mShareActionProvider.setShareIntent(sendIntent); //needed to be able to click on Item 

    mShareActionProviderItem.getActionView().setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      String url = ((GameFragment) getFragmentManager().findFragmentByTag(GAME_FRAGMENT)).getUrl(); 

      /*ShareButton set URL*/ 
      Intent sendIntent = new Intent(Intent.ACTION_SEND); 
      sendIntent.setType("text/plain"); 
      sendIntent.putExtra(Intent.EXTRA_TEXT, String.format(getResources().getString(R.string.share_text), url)); 
      mShareActionProvider.setShareIntent(sendIntent); 
     } 
    }); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch(item.getItemId()) { 
     case R.id.action_share: 
      /*URL holen*/ 
      String url = ((GameFragment) getFragmentManager().findFragmentByTag(GAME_FRAGMENT)).getUrl(); 

      /*ShareButton mit URL bestücken*/ 
      ShareActionProvider mShareActionProvider = (ShareActionProvider) item.getActionProvider(); 
      Intent sendIntent = new Intent(Intent.ACTION_SEND); 
      sendIntent.setType("text/plain"); 
      sendIntent.putExtra(Intent.EXTRA_TEXT, String.format(getResources().getString(R.string.share_text), url)); 
      mShareActionProvider.setShareIntent(sendIntent); 
      break; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
    return true; 
+0

можно дублировать http://stackoverflow.com/questions/11627892/onoptionsitemselected-not-called-when-using-actionlayout-sherlockactionbar – zizoujab

+0

Это сообщение не работает для меня. Я описал неправильное поведение выше. Поэтому мой поток НЕ является дубликатом. – janwo

+0

Предложение с setOnClickListener (см. Здесь http://stackoverflow.com/a/11628492/1463921) не работает, потому что у меня есть ShareActionProvider-Widget, и я думаю, что он ведет себя по-другому. Оба, setOnClickListener и onOptionsItemSelected не запускаются при нажатии на кнопку совместного доступа. У кого-нибудь есть идея? – janwo

ответ

4

Я знаю, что это немного поздно, но я просто была такая же проблема, и я решил ее путем определения OnShareTArgetSelectedListener на моем объекте ShareActionProvider. :

 mShareActionProvider.setOnShareTargetSelectedListener(new OnShareTargetSelectedListener() { 

      @Override 
      public boolean onShareTargetSelected(ShareActionProvider arg0, Intent arg1) { 

       return false; 
      } 
     }); 

http://developer.android.com/reference/android/widget/ShareActionProvider.html#setOnShareTargetSelectedListener(android.widget.ShareActionProvider.OnShareTargetSelectedListener)

+0

Можете ли вы объяснить, как вы достигли этого. Потому что, когда я добавляю его onCreateOptionMenu, он не работает onOptionItemSelected – Jigar

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