2014-03-07 30 views
0

嗨,大家好,我在MainActivity.java中設置了這段代碼,在我的應用上添加了一個共享按鈕。我知道操作欄在以前的android版本上不能很好地工作。其中一位擁有android 2.3的客戶告訴我,當他點擊手機菜單按鈕時,應用程序崩潰並被迫關閉。 從3.0版本到以上版本都很好,你會看到分享按鈕。是否有一些代碼可以在此函數之前添加以覆蓋o防止在Android版本低於3.0時使用共享按鈕操作?安裝ActionBar後的Android 2.x錯誤

這是我在我的代碼:

@Override 

    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.main_menu, menu); 
     MenuItem shareItem = (MenuItem) menu.findItem(R.id.action_share); 
     ShareActionProvider mShare = (ShareActionProvider)shareItem.getActionProvider(); 

     Intent shareIntent = new Intent(Intent.ACTION_SEND); 
     shareIntent.setAction(Intent.ACTION_SEND); 
     shareIntent.setType("text/plain"); 
     shareIntent.putExtra(Intent.EXTRA_TEXT, "Download here https://www.apps.com"); 

     mShare.setShareIntent(shareIntent); 
     return true; 
    } 

我menu.xml文件文件具有以下(顯示的圖標,工程確定):

<item android:id="@+id/action_share" android:title="@string/menu_share" 
     android:icon="@drawable/menu_share" android:showAsAction="ifRoom" 
     android:actionProviderClass="android.widget.ShareActionProvider"></item> 
+0

請格式化你的代碼正確 –

+0

我格式化代碼。完成了! – unarea

回答

0

動作條,不提供出來的Android 2.x中的盒子。發生崩潰的原因是MenuItem不理解getActionProvider(),它是在API 14(Android 4.0 Ice Cream Sandwich)中引入的。

你有兩個選擇:

  1. 使用v7 appcompat library爲了使用舊版Android的動作條;
  2. 或者,你可以實現老式的2.x菜單。

這是你可以做的,以避免在2.x設備上的崩潰。通過檢查設備運行冰淇淋三明治或更高版本後衛使用新的API:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.main_menu, menu); 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { 
     MenuItem shareItem = (MenuItem) menu.findItem(R.id.action_share); 
     ShareActionProvider mShare = (ShareActionProvider)shareItem.getActionProvider(); 

     Intent shareIntent = new Intent(Intent.ACTION_SEND); 
     shareIntent.setAction(Intent.ACTION_SEND); 
     shareIntent.setType("text/plain"); 
     shareIntent.putExtra(Intent.EXTRA_TEXT, "Download here https://www.apps.com"); 

     mShare.setShareIntent(shareIntent); 
    } 
    return true; 
} 
+0

感謝您的幫助我添加了行if(Build.VERSION.SDK_INT> = Build.VERSION_CODES.ICE_CREAM_SANDWICH),但之後給我錯誤MenuItem shareItem(它們顯示爲紅色)。如果我把一個; if(Build.VERSION.SDK_INT> = Build.VERSION_CODES.ICE_CREAM_SANDWICH);錯誤消失 – unarea

+0

請看以上請 – unarea

+0

我很抱歉,我忘了在if語句後加上{{(大括號)。我糾正了上面的代碼。 – bolot