2016-05-10 3 views
0

Я пытаюсь предоставить функцию общего доступа на картах, отображаемых в приложении для Android. Я узнал об ShareactionProvider. Этот actionProvider должен присутствовать на каждом картотеке. Я поместил код для ShareActionprovider в свой onBindViewHolder в адаптере. Когда приложение запускается, все карты выполняют свою долю одновременно. Я хотел бы назвать эту долю только тогда, когда пользователь запрашивает.Использование ShareActionProvider на CardView в Recyclerview

@Override 
public void onBindViewHolder(final ViewHolder viewHolder, final Cursor cursor) { 
final NewsFacade facade = NewsFacade.fromCursor(cursor); 
MenuItem shareMenuItem = viewHolder.toolbar.getMenu().findItem(R.id.share); 
    ShareActionProvider shareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(shareMenuItem); 
    shareActionProvider.setShareIntent(viewHolder.sendShareIntent(facade, context)); 
    shareActionProvider.setShareHistoryFileName("custom_share_history.xml"); 

А Вот вспомогательные методы, чтобы помочь в обмене:

public Intent sendShareIntent(NewsFacade facade, Context context) 
    { 
     saveImageToCache(facade, context); 
     return shareImage(context); 
    } 

    private void saveImageToCache(NewsFacade facade, Context context) 
    { 
     try { 
      Bitmap bitmap = facade.getThumb(); 
      File cachePath = new File(context.getCacheDir(), "images"); 
      cachePath.mkdirs(); 
      FileOutputStream stream = new FileOutputStream(cachePath + "/image.png"); // overwrites this image every time 
      bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); 
      stream.close(); 

     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    private Intent shareImage(Context context) 
    { 
     File imagePath = new File(context.getCacheDir(), "images"); 
     File newFile = new File(imagePath, "image.png"); 
     Uri contentUri = FileProvider.getUriForFile(context, "com.example.clinton.companion.fileprovider", newFile); 

     if (contentUri != null) { 

      Intent shareIntent = new Intent(); 
      shareIntent.setAction(Intent.ACTION_SEND); 
      shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // temp permission for receiving app to read this file 
      shareIntent.setDataAndType(contentUri,context.getContentResolver().getType(contentUri)); 
      shareIntent.putExtra(Intent.EXTRA_STREAM, contentUri); 
      context.startActivity(Intent.createChooser(shareIntent, "Choose an app")); 
      return shareIntent; 

     } 
     return null; 
    } 

Я знаю, я называю ActionProvider в неправильном месте. Но где еще, следует ли мне это назвать, мне нужен экземпляр объекта, который имеет вид cardview, поэтому я могу получить изображение в кардвале для совместного использования.

Пожалуйста, любая помощь будет оценена.

ответ

0

Я исправил его. я звоню

context.startActivity(Intent.createChooser(shareIntent, "Choose an app")); 

, который автоматически выполняет обмен.