簡體   English   中英

設置ActionBar后,Android 2.x中出現錯誤

[英]Error in Android 2.x after setting the ActionBar

嗨,大家好,我在MainActivity.java中設置了此代碼,以在應用程序上添加共享按鈕。 我知道操作欄在早期的android版本上無法正常工作。 一位裝有android 2.3的客戶告訴我,當他按下電話菜單按鈕時,應用程序崩潰並被迫關閉。 從3.0版到更高版本,一切正常,您會看到“共享”按鈕。 我可以在此功能之前添加一些代碼行來覆蓋o如果Android版本低於3.0,則阻止使用共享按鈕操作?

這是我的代碼中的內容:

@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>

在Android 2.x中無法立即使用ActionBar。 發生崩潰是因為MenuItem無法理解getActionProvider() ,它是API 14(Android 4.0 Ice Cream Sandwich)中引入的。

您有兩種選擇:

  1. 使用v7 appcompat庫 ,以便在舊版Android中使用ActionBar;
  2. 或者,您可以實施老式的2.x菜單。

這是可以避免在2.x設備上崩潰的方法。 通過檢查設備是否正在運行Ice Cream Sandwich或更高版本來保護使用較新的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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM