답변

12

공유 이력 데이터 모델을 모두으로 유지하려면 추가 "기본 공유 활동"icom을 원하지 않습니다. How do you turn off share history when using ShareActionProvider?의 대답은 충분하지 않습니다.

은 당신이해야 할 것은 :

  • 복사 프로젝트 코드에 ActionBarSherlock의에서 이러한 클래스
    • ShareActionProvider.java 당신의 ShareActionProvider에서
    • ActivityChooserView.java
  • . java 클래스에서 ActionBarShelock 파일 위치 대신 방금 복사 한 ActivityChooserView.java 가져 오기 ActivityChooserView.java에서
  • -
    • 은 꽤 추한 (if (false)와 함께이 라인을 대체 라인 if (activityCount > 0 && historySize > 0)
    • 을 찾을 수 있지만, 가장 빠른 수정 프로그램입니다. 당신이 DefaultActivity 구현의 모든 항목)
    을 제거하는 코드로 탐구 할 수

편집 : 이의 모습 XML에서, 메뉴 항목에 새 ActionProvider을 설정하는 것을 잊지 마세요 : android:actionProviderClass="com.*.CustomShareActionProvider"

그게 전부 야!

+0

지금 ActivityChooserModelClient를 구현할 수 없기 때문에 뭔가 빠졌습니까? – whitfin

+0

또한 (이전에 편집하지 않는 것이 좋지 않음); ActionProvider를 사용하여 액티비티를 종료하고 돌아 가면 아이콘이 정상적으로 비어있는 [] 상자가 나타납니다. – whitfin

+1

이 솔루션에 문제가 있습니다. 내 맞춤 클래스 (외부 패키지로 차단)에서 com.actionbarsherlock.widget.ActivityChooserModel을 가져올 수 없습니다. 이 클래스를 패키지에 복사해도 작동하지 않습니다 (앱이 다운 됨) :/ –

4

Sean의 답변을 바탕으로 필요한 수업을 만들었으므로 프로젝트에 복사 할 수 있습니다 (https://gist.github.com/saulpower/10557956). 이것은 히스토리를 끌 수있는 기능을 추가 할뿐만 아니라 공유하고 싶은 앱을 필터링합니다 (패키지 이름을 아는 경우).

private final String[] INTENT_FILTER = new String[] { 
     "com.twitter.android", 
     "com.facebook.katana" 
}; 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.journal_entry_menu, menu); 

    // Set up ShareActionProvider's default share intent 
    MenuItem shareItem = menu.findItem(R.id.action_share); 

    if (shareItem instanceof SupportMenuItem) { 
     mShareActionProvider = new ShareActionProvider(this); 
     mShareActionProvider.setShareIntent(ShareUtils.share(mJournalEntry)); 
     mShareActionProvider.setIntentFilter(Arrays.asList(INTENT_FILTER)); 
     mShareActionProvider.setShowHistory(false); 
     ((SupportMenuItem) shareItem).setSupportActionProvider(mShareActionProvider); 
    } 

    return super.onCreateOptionsMenu(menu); 
} 
11

이 문제를 해결하는 방법을 찾았습니다. 지원 라이브러리 23.0.1을 사용하고 있습니다. 다른 지원 라이브러리 버전에서는 테스트하지 않았습니다.

ShareActionProvider를 만들 때 onCreateActionView() 메서드를 재정의하고 null을 반환하면 쉽게 해결할 수 있습니다. 그런 다음 팝업 메뉴에서 모든 기록을 추적 할 수 있지만 기록은 툴바에 표시되지 않습니다. 현재 내가이 해결을 사용하여 문제를 발견하지 않았습니다

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuItem item = menu.add(Menu.NONE, R.id.menu_share, Menu.NONE, R.string.share); 
    item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); 
    mShareActionProvider = new ShareActionProvider(this) { 
     @Override 
     public View onCreateActionView() { 
      return null; 
     } 
    }; 
    item.setIcon(R.drawable.abc_ic_menu_share_mtrl_alpha); 
    MenuItemCompat.setActionProvider(item, mShareActionProvider); 
    return true; 
} 

: 여기

은 코드 샘플입니다.

+1

이것은 정답입니다 (예 : 2016). – VSG24

+0

저는 2017 년 (거의) 4 분기의 증인입니다. 실제로이 사실을 역사적인 사건으로 처리하지는 않습니다. 지원 라이브러리 버전 26.0.1. – Xhezairi