2013-02-25 47 views
1

夫婦的調查小時後,並試圖找到一個解決方案,我決定在這裏寫我的想法的問題,也許別人的臉,還發現了一個修復它。 我有一個菜單的應用程序,選項是一個分享選項一個,聲明這樣的菜單的XML文件:在設備方向可共享意向列表菜單中更改(shareActionProvider)

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

onOptionsItemSelected方法創建和設置共享意圖:

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以防止重新創建活動。

我想先看看我怎麼能打開共享的應用列表編程。

一個)。調用下面的方法不會發生視覺事件;它只是更新了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

Ç)。該只是打開菜單選項:

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

那麼,有沒有一種方法以編程方式打開的應用程序共享項目列表?或者至少有沒有辦法按下菜單鍵編程(=編程方式選擇一個菜單項)?

另一個問題是我怎麼知道共享列表在方向上是否可見?

對於此我使用boolean可變private boolean isShareOptionMenuListVisible = false;我將它保存在方法onSaveInstanceState()onCreate()方法恢復了它。 我按isShareOptionMenuListVisible = true按Share(分享)項目時,但我無法找到一種方法,當它不再可見時變爲false。 使用覆蓋方法onOptionsMenuClosed是沒有幫助我,因爲這個(這是在文檔,即使我可以說這是不是真實的,因爲在我的應用程序不會被調用),以及「每當選項菜單被關閉被稱爲」我想知道共享應用程序選項菜單何時關閉。

這裏是一個示例文件項目,展示了上述所有問題:project link

歡迎任何幫助!謝謝。

回答

1

如果您使用SDK 11或以上,你可以註冊以接收回調時(或)行動項目的菜單顯示,包括您的ShareActionProvider:

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

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

}); 

這種方法也支持ActionBarSherlock,但由於某種原因,偵聽器從未被實際調用過。