0

Я проверил свой код с родными типами. Он дает мне правильный результат , как показано ниже.ShareActionProvider не работает с типами ActionBarSherlock?

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); 
} 

} 

Спасибо.

ответ

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-v11 и res/values-v14, я получил приложение работает снова. Как ни странно, мне не удалось заставить эту работу работать с другими темами.

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> 
Смежные вопросы