2013-02-25 1 views
1

몇 시간 동안 조사를하고 해결책을 찾으려고했는데 여기에 내 문제를 적어두기로 결심했습니다. 그것. 내가 만들공유 방향 목록에서 사용할 수있는 인 텐트 목록 메뉴가 변경됨 (shareActionProvider)

<item android:id="@+id/menu_share" 
      android:actionProviderClass="android.widget.ShareActionProvider" 
      android:title="Share"/> 

방법 onOptionsItemSelected에서와 공유 의도 설정 : 나는 메뉴와 응용 프로그램이하는 공유 옵션되는 옵션 중 하나는 메뉴 XML 파일에 다음과 같이 선언

private ShareActionProvider shareActionProvider; 
@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.menu_share: 
       MenuItem actionItem = optionsMenu.findItem(R.id.menu_share); 
       shareActionProvider = (ShareActionProvider) actionItem.getActionProvider(); 
       shareActionProvider.setShareIntent(createShareIntent()); 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 

공유 메뉴 옵션을 누르면 공유 할 앱이있는 목록이 표시됩니다. enter image description here 내가 원하는 것은 장치가 보이도록 표시기를 돌릴 때 대신 사라지는 것입니다. 내가 활동을 재현하는 것을 막기 위해 android:configChanges을 사용할 수 없다는 것을 언급합니다.

프로그래밍 방식으로 공유 앱 목록을 열려면 어떻게해야할까요?

a). 아래 메서드를 호출하면 시각적으로 아무 것도 발생하지 않습니다. 단지 업데이 트 ShareActionProvider

public void showShareItemList() { 
    MenuItem actionItem = optionsMenu.findItem(R.id.menu_share); 
    shareActionProvider = (ShareActionProvider) actionItem.getActionProvider(); 
    shareActionProvider.setShareIntent(createShareIntent()); 
} 

b). 아래 메소드를 호출하면 위의 그림과 같은 메뉴 옵션 목록이 아닌 새로운 활동이 열립니다.

public void showShareItemList2(){ 
     Intent sharingIntent = new Intent(); 
     sharingIntent.setAction(Intent.ACTION_SEND); 
     sharingIntent.setType("text/plain"); 
     sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Subject Here"); 
     startActivity(Intent.createChooser(sharingIntent, "Share")); 
    } 

결과 : 방법 아래 enter image description here

C) 국지적 그냥 메뉴 옵션을 엽니 다 : 그래서

public void showShareItemList3() { 
    openOptionsMenu(); // programmatically open the options menu 
} 

을 프로그래밍 방식으로 응용 프로그램의 공유 항목 목록을 열 수있는 방법이있다 ? 또는 적어도 프로그래밍 방식으로 메뉴 키를 누르는 방법이 있습니다 (= 프로그래밍 방식으로 메뉴 항목 선택)?

다른 문제는 입니다. 방향이 바뀌면 공유 목록이 보이는지 어떻게 알 수 있습니까? 이를 위해

나는 방법 onSaveInstanceState()에 저장하고 onCreate() 방법을가 복원 boolean 변수 private boolean isShareOptionMenuListVisible = false;을 사용하고 있습니다. Share 항목을 누를 때 isShareOptionMenuListVisible = true을 만들었지 만 더 이상 보이지 않을 때 false로 설정할 수있는 방법을 찾지 못했습니다. onOptionsMenuClosed 오버라이드 메서드를 사용하면이 이 "옵션 메뉴가 닫힐 때마다 호출됩니다" (내 응용 프로그램에서는 절대 호출되지 않기 때문에 설명서에 포함되어 있습니다.) 공유 앱 옵션 메뉴가 닫히는시기를 알고 싶습니다.

다음은 위의 모든 문제를 보여주는 샘플 프로젝트입니다 : project link.

도움이되었습니다. 감사.

답변

1

당신은 SDK (11)를 사용하고있는 이상, 당신은 (또는) 작업 항목의 메뉴가 ShareActionProvider을 포함하여 보여주는 경우 콜백을 받기 위해 등록 할 수 있습니다 경우

getActionBar().addOnMenuVisibilityListener(new ActionBar.OnMenuVisibilityListener() { 

    @Override 
    public void onMenuVisibilityChanged(boolean isVisible) { 
     ... 
    } 

}); 

이 방법은도에서 지원됩니다 ActionBarSherlock,하지만 어떤 이유로 청취자는 실제로 호출되지 않습니다.