ShareActionProvider不使用ActionBarSherlock类型?

时间:2013-11-07 12:21:33

标签: android android-actionbar actionbarsherlock shareactionprovider

我用本机类型测试了我的代码。它为我提供了正确的输出,如下所示。

enter image description here

但是,当我更改为ActionBarSherlock类型时,我得到以下错误

android.content.res.Resources$NotFoundException: Resource ID #0x0
at android.content.res.Resources.getValue(Resources.java:1014)
at android.content.res.Resources.getDrawable(Resources.java:659)
at com.actionbarsherlock.widget.ShareActionProvider.onCreateActionView(ShareActionProvider.java:170)

styles.xml:

<resources xmlns:android="http://schemas.android.com/apk/res/android">

    <!--
        Base application theme, dependent on API level. This theme is replaced
        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
    -->
    <style name="AppBaseTheme" parent="Theme.Sherlock">
        <!--
            Theme customizations available in newer API levels can go in
            res/values-vXX/styles.xml, while customizations related to
            backward-compatibility can go here.
        -->

    </style>

    <!-- Application theme. -->
<!--     <style name="AppTheme" parent="AppBaseTheme">
        All customizations that are NOT specific to a particular API-level can go here.
        <item name="actionBarStyle">@style/NoteMarkActionBar</item>
    </style>
 -->
    <style name="Theme.NoteMark" parent="AppBaseTheme">
        <item name="actionBarStyle">@style/NoteMarkActionBar</item>
        <item name="android:actionBarStyle">@style/NoteMarkActionBar</item>
        <item name="actionBarItemBackground">@drawable/actionbar_item_selector</item>

        <!-- <item name="android:actionBarItemBackground">?attr/selectableItemBackground</item>   -->
<!--        <item name="android:actionBarDivider">@drawable/divider  </item>
        <item name="actionBarDivider">@drawable/divider</item> -->
        <item name="android:showDividers">end</item>
        <!-- <item name="showDividers">end</item> -->
        <item name="android:windowBackground">@color/content_background</item> 

    </style>


    <style name="NoteMarkActionBar" parent="Widget.Sherlock.ActionBar.Solid">
        <!-- <item name="android:background">@color/actionbar_blue</item> -->
        <!-- <item name="background">@color/actionbar_blue</item> -->
        <item name="background">@drawable/actionbar</item>
        <item name="android:background">@drawable/actionbar</item>
        <item name="selectableItemBackground">@drawable/actionbar</item>
        <!-- <item name="android:background">@color/actionbar_blue</item> -->


    </style>

    <style name="NoteMarkContent" >
        <item name="android:background">@color/content_background</item>
    </style>
</resources>

menu.xml文件

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:id="@+id/item_shareActionProvider"
            android:title="ShareAction"
            android:icon="@drawable/search_icon"
            android:showAsAction="always"
            android:actionProviderClass="com.actionbarsherlock.widget.ShareActionProvider" />


</menu>

NoteDisplayActivity.java

package com.android.notify;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import android.annotation.SuppressLint;

import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;

import android.view.View;
import android.widget.ImageView;

import android.widget.TextView;


import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.actionbarsherlock.widget.ShareActionProvider;
import com.android.model.Audio;
import com.android.model.Music;
import com.android.model.Note;
import com.android.model.Photo;
import com.android.model.Video;
import com.android.notify.utils.Constants;
import com.android.notify.utils.ShareData;



//@SuppressLint("NewApi")
public class NoteDisplayActivity extends SherlockActivity{
    String TAG = NoteDisplayActivity.class.getCanonicalName();
    TextView mContentTextView;
    List<ImageView> mImageViewList = new ArrayList<ImageView>();

    ImageView mImageView1;
    ImageView mImageView2;
    ImageView mImageView3;
    ImageView mImageView4;
    ImageView mImageView5;
    ImageView mVideoImageView;
    TextView mAudioClipTextView;
    TextView mAudioNameTextView;

    TextView mMusicTitleTextView;
    TextView mMusicArtistTextView;

    Note mNote;

    @SuppressLint("NewApi")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        mNote = getIntent().getParcelableExtra(Constants.NOTE_EXTRAS);


        setContentView(R.layout.activity_display_note);

        mContentTextView = (TextView) this.findViewById(R.id.textview_content);

        mImageView1 = (ImageView) this.findViewById(R.id.imageview_1);
        mImageView2 = (ImageView) this.findViewById(R.id.imageview_2);
        mImageView3 = (ImageView) this.findViewById(R.id.imageview_3);
        mImageView4 = (ImageView) this.findViewById(R.id.imageview_4);
        mImageView5 = (ImageView) this.findViewById(R.id.imageview_5);

        mImageViewList.add(mImageView1);
        mImageViewList.add(mImageView2);
        mImageViewList.add(mImageView3);
        mImageViewList.add(mImageView4);
        mImageViewList.add(mImageView5);


        mVideoImageView = (ImageView) this.findViewById(R.id.imageview_video);

        mAudioClipTextView = (TextView) this.findViewById(R.id.textview_audio_clip);
        mAudioNameTextView = (TextView) this.findViewById(R.id.textview_clip_name);

        mMusicTitleTextView = (TextView) this.findViewById(android.R.id.text1);
        mMusicArtistTextView = (TextView) this.findViewById(android.R.id.text2);

        ActionBar bar = getSupportActionBar();
//      ActionBar bar = getActionBar();
        bar.setTitle(mNote.getTitle());

        mContentTextView.setText(mNote.getContent());

        displayPhotos();
        displayVideo();
        displayAudio();
        displayMusic();


    }


    @SuppressLint("NewApi")
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // TODO Auto-generated method stub
        getSupportMenuInflater().inflate(R.menu.shareactionprovider, menu);
        ShareActionProvider shareActionProvider = (ShareActionProvider) (menu.findItem(R.id.item_shareActionProvider)).getActionProvider();
//      ShareActionProvider shareActionProvider = new ShareActionProvider(this);
        shareActionProvider.setShareHistoryFileName(ShareActionProvider.DEFAULT_SHARE_HISTORY_FILE_NAME);
        ShareData shareData = new ShareData(this, mNote.getPhotoList(), mNote.getVideo());
        Intent shareIntent = shareData.createShareIntent(Intent.ACTION_SEND_MULTIPLE, "image/*");
        shareActionProvider.setShareIntent(shareIntent);

        menu.add(0, Constants.MENU_ITEM_EDIT, 0, "Edit")
        .setTitle("Edit")
        .setIcon(R.drawable.content_edit)
        .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

/*      menu.add(0, Constants.MENU_ITEM_SHARE_ACTION_PROVIDER, 0, "Share")
        .setTitle("Share")
        .setIcon(R.drawable.location_map)
        .setActionProvider(shareActionProvider)
        .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);*/





        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        Intent intent;
        switch(item.getItemId()) {


        case Constants.MENU_ITEM_EDIT : intent = new Intent(this, NewNoteActivity.class);
                                                    intent.putExtra(Constants.NOTE_EXTRAS, mNote);
                                                    intent.putExtra(Constants.NOTE_EDIT, true);
                                                    startActivity(intent);
                                        break;
        }


        return true;
    }




    public void displayPhotos() {
        List<Photo> photoList;
        Photo photo;

        ImageView imageView;

        if(mNote.hasPhotos()) {
            photoList = mNote.getPhotoList();
            Iterator<Photo> photoIterator = photoList.iterator();
            Iterator<ImageView> imageViewIterator = mImageViewList.iterator();

            while(photoIterator.hasNext()) {
                final Uri photoUri;

                photo = photoIterator.next();
                Bitmap bitmap = photo.fetchThumbnail(this, 800);
                if(imageViewIterator.hasNext()) {
                    imageView = imageViewIterator.next();
                    imageView.setImageBitmap(bitmap);
                    imageView.setVisibility(View.VISIBLE);

                    photoUri = photo.getUri();
                    imageView.setOnClickListener(new View.OnClickListener() {

                        @Override
                        public void onClick(View v) {
                            // TODO Auto-generated method stub

                            Intent intent = new Intent(Intent.ACTION_VIEW);
                            intent.setDataAndType(photoUri, "image/*");
                            startActivity(intent);
                            Log.d(TAG, "photoUri : " + photoUri);
                        }
                    });
                }
            }


        }

    }

    public void displayVideo() {
        final Video video;

        if(mNote.hasVideo()) {
            video = mNote.getVideo();
            Bitmap bitmap = video.fetchThumbnail(this, MediaStore.Images.Thumbnails.MINI_KIND);
            mVideoImageView.setImageBitmap(bitmap);
            mVideoImageView.setVisibility(View.VISIBLE);
            mVideoImageView.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    Log.d(TAG, video.getVideoUri().toString());
                    Intent intent = new Intent(Intent.ACTION_VIEW);
//                  Intent.createChooser(intent, "Choose");
//                  intent.setComponent()
                    intent.setDataAndType(video.getVideoUri(), "video/*");

                    startActivity(intent);

                }
            });
        }
    }

    public void displayAudio() {
        final Audio audio;

        if(mNote.hasAudio()) {
            audio = mNote.getAudio();
            final Uri audioUri = audio.getUri();
            String fileName = audioUri.getLastPathSegment();
            mAudioNameTextView.setText(fileName);
            View parent = (View) mAudioNameTextView.getParent();
            parent.setVisibility(View.VISIBLE);


            parent.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    intent.setDataAndType(audioUri, "video/*");
                    startActivity(intent);
                    Log.d(TAG, "audioUri : " + audioUri);
                }
            });
//          Bitmap bitmap = audio.fetchThumbnail(0);

        }


    }

    public void displayMusic() {
        Music music;


        if(mNote.hasMusic()) {
            music = mNote.getMusic();
            mMusicTitleTextView.setText(music.getTitle());
            mMusicArtistTextView.setText(music.getArtist());

            View parent = (View) mMusicTitleTextView.getParent();
            parent.setVisibility(View.VISIBLE);
        }


    }

@Override
public void onBackPressed() {
    // TODO Auto-generated method stub
//  super.onBackPressed();
//  finish();
    Intent intent = new Intent(this, NotesActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);
}   

}

感谢。

2 个答案:

答案 0 :(得分:0)

我使用v7兼容性库遇到了同样的问题。通过设置,

<application
...
android:theme="@style/Theme.Base.AppCompat.Light.DarkActionBar">
AndroidManifest.xml中的

<style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
    ...
</style>

res/values-v11res/values-v14中,我已经让应用程序再次运行。奇怪的是,我无法使用其他主题。

答案 1 :(得分:0)

使用ShareActionProvider只需使用Theme.Sherlock.Light作为我的基本主题,我没有任何问题:

<style name="AppBaseTheme" parent="@style/Theme.Sherlock.Light">
   ...
</style>
<style name="AppBaseViewPagerTheme" parent="@style/AppBaseTheme">
    <item name="vpiTitlePageIndicatorStyle">@style/AppBaseTitlePageIndicator</item>
</style>
相关问题