0
public class EyeLinerActivity extends Activity {
        int position;
        private ShareActionProvider provider;
        ELImageAdapter adapter;
            @Override
            public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_eyeliner);

            //ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
            //adapter = new ELImageAdapter(this);
            //viewPager.setAdapter(adapter);
            //ViewPager.setCurrentItem(0);
             ViewPager  pager = (ViewPager) findViewById(R.id.view_pager);
             adapter = new ELImageAdapter(this);
              pager.setAdapter(new ELImageAdapter(this));
    //        ImageView imageView = new ImageView(context);
    //      imageView.setImageResource(GalImages[position]);
    //        if (pager.getAdapter() != null)
    //        pager.setAdapter(adapter);
    //        pager.setCurrentItem(position);
            }
            @SuppressLint("NewApi")
            @Override
            public boolean onCreateOptionsMenu(Menu menu) {
                getMenuInflater().inflate(R.menu.main, menu);
                MenuItem shareitem= (MenuItem)menu.findItem(R.id.action_share);
                ShareActionProvider provider = (ShareActionProvider)shareitem.getActionProvider();  
                Bitmap bitmap;
                OutputStream output;
                //ArrayList<Uri> imageUris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
                bitmap = BitmapFactory.decodeResource(getResources(),adapter.GalImages[position]); 
                File filepath = Environment.getExternalStorageDirectory();
                File dir = new File(filepath.getAbsolutePath() + "/Eye Liner/");
                dir.mkdirs();
                File file = new File(dir, "Image.png"); 
                try {
                Intent share = new Intent(Intent.ACTION_SEND);
                share.setAction(Intent.ACTION_SEND);
                share.setType("image/jpeg");
                output = new FileOutputStream(file);
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, output);
                output.flush();
                output.close();
                Uri uri = Uri.fromFile(file);

                share.putExtra(Intent.EXTRA_STREAM, uri);
                 provider.setShareIntent(share);
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    }
                 return true;
                    }

                //return super.onCreateOptionsMenu(menu);

             private void setShareIntent(Intent intent) {
                    if (provider != null) {
                        provider.setShareIntent(intent);
                    }
                }
        }

adapter.java

public class ELImageAdapter  extends PagerAdapter {
    Context context;
    public int[] GalImages = new int[] {
             R.drawable.l_1,
                R.drawable.l_2,
                R.drawable.l_3,
                R.drawable.l_4,
                R.drawable.l_5,
                R.drawable.l_6,
                R.drawable.l_7,
                R.drawable.l_8,
                R.drawable.l_9,
                R.drawable.l_10,
                R.drawable.l_11,
                R.drawable.l_12,
                R.drawable.l_13,
                R.drawable.l_14,
                R.drawable.l_15,
                R.drawable.l_16,
                R.drawable.l_17

    };
    ELImageAdapter(Context context){
    this.context=context;
    }
    @Override
    public int getCount() {
    return GalImages.length;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
    return view == ((ImageView) object);
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
    ImageView imageView = new ImageView(context);
    int padding = context.getResources().getDimensionPixelSize(R.dimen.activity_horizontal_margin);
    imageView.setPadding(padding, padding, padding, padding);
    imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
    imageView.setImageResource(GalImages[position]);
    ((ViewPager) container).addView(imageView, 0);
    return imageView;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
    ((ViewPager) container).removeView((ImageView) object);
    }
    }

i want to share images .. and i am using viewpager how can i get images ids to share.? as viewpager does not support onclickitemlistener property. kindly suggest how i can get image id to dhare

user4440416
  • 71
  • 1
  • 11

4 Answers4

0

If you implement a FragmentStatePagerAdapter, each page of your ViewPager can host an instance of a Fragment of your design, with its layout defined in XML. This will allow you to include whatever Views you need to compose your custom sharing UI.

From Creating Swipe Views with Tabs | Android Developers:

FragmentStatePagerAdapter

This is best for paging across a collection of objects for which the number of pages is undetermined. It destroys fragments as the user navigates to other pages, minimizing memory usage.

For example, here's how you might use FragmentStatePagerAdapter to swipe across a collection of Fragment objects:

public class CollectionDemoActivity extends FragmentActivity {
    // When requested, this adapter returns a DemoObjectFragment,
    // representing an object in the collection.
    DemoCollectionPagerAdapter mDemoCollectionPagerAdapter;
    ViewPager mViewPager;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_collection_demo);

        // ViewPager and its adapters use support library
        // fragments, so use getSupportFragmentManager.
        mDemoCollectionPagerAdapter =
                new DemoCollectionPagerAdapter(
                        getSupportFragmentManager());
        mViewPager = (ViewPager) findViewById(R.id.pager);
        mViewPager.setAdapter(mDemoCollectionPagerAdapter);
    }
}

// Since this is an object collection, use a FragmentStatePagerAdapter,
// and NOT a FragmentPagerAdapter.
public class DemoCollectionPagerAdapter extends FragmentStatePagerAdapter {
    public DemoCollectionPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int i) {
        Fragment fragment = new DemoObjectFragment();
        Bundle args = new Bundle();
        // Our object is just an integer :-P
        args.putInt(DemoObjectFragment.ARG_OBJECT, i + 1);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public int getCount() {
        return 100;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return "OBJECT " + (position + 1);
    }
}

// Instances of this class are fragments representing a single
// object in our collection.
public static class DemoObjectFragment extends Fragment {
    public static final String ARG_OBJECT = "object";

    @Override
    public View onCreateView(LayoutInflater inflater,
            ViewGroup container, Bundle savedInstanceState) {
        // The last two arguments ensure LayoutParams are inflated
        // properly.
        View rootView = inflater.inflate(
                R.layout.fragment_collection_object, container, false);
        Bundle args = getArguments();
        ((TextView) rootView.findViewById(android.R.id.text1)).setText(
                Integer.toString(args.getInt(ARG_OBJECT)));
        return rootView;
    }
}
unrulygnu
  • 1,596
  • 13
  • 16
0

In your case you could change share intent on every page selected event, like following:

pager.setOnPageChangeListener(new  ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int i, float v, int i2) {

        }

        @Override
        public void onPageSelected(int i) {
            setShareIntentForPosition(i);
        }

        @Override
        public void onPageScrollStateChanged(int i) {

        }
    });

private void setShareIntentForPosition(int currentPosition){
    Bitmap bitmap;
    OutputStream output;
    bitmap = BitmapFactory.decodeResource(getResources(),adapter.GalImages[currentPosition]); 
    File filepath = Environment.getExternalStorageDirectory();
    File dir = new File(filepath.getAbsolutePath() + "/Eye Liner/");
    dir.mkdirs();
    File file = new File(dir, "Image.png"); 
    try {
    Intent share = new Intent(Intent.ACTION_SEND);
    share.setAction(Intent.ACTION_SEND);
    share.setType("image/jpeg");
    output = new FileOutputStream(file);
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, output);
    output.flush();
    output.close();
    Uri uri = Uri.fromFile(file);
    share.putExtra(Intent.EXTRA_STREAM, uri);
    setShareIntent(share);
}
private void setShareIntent(Intent intent) {
    if (provider != null) {
           provider.setShareIntent(intent);
    }
}
Andrey T
  • 2,008
  • 20
  • 19
  • public void onPageSelected(int i) { Intent it = getIntent(); // Selected image id position = it.getExtras().getInt("position"); }i have used this but when i ever i swipe to next image .. activity has stoped – user4440416 Feb 27 '15 at 17:22
0

how can i get images ids to share.?

Use ViewPager.getCurrentItem() to get current image id from ViewPager:

1. Create a method in ELImageAdapter class to get current selected image id :

public int getImageId(int pos){
   return GalImages[pos];
 }

2. Call getImageId method using adapter object in onCreateOptionsMenu method :

 int currentPos=pager.getCurrentItem();
 int currentImgId=adapter.getImageId(currentPos);

Now use currentImgId id to share selected image.

ρяσѕρєя K
  • 132,198
  • 53
  • 198
  • 213
  • it doesnt work .. whenever i click to open activity .. activity has stopped error – user4440416 Feb 27 '15 at 16:58
  • @user4440416: getting right id in `currentImgId` or not? – ρяσѕρєя K Feb 27 '15 at 16:59
  • bitmap = BitmapFactory.decodeResource(getResources(),adapter.GalImages[currentImgId]);no..i have use this.. it doesnt work . and currentImgId=adapter.getImageId(currentPos);as u suggest – user4440416 Feb 27 '15 at 17:19
  • @user4440416: i mean what value getting in `currentImgId` ? – ρяσѕρєя K Feb 27 '15 at 17:21
  • @user4440416: and see following post [Android: action_send put extra_stream from res/drawable folder causes crash](http://stackoverflow.com/questions/10271993/android-action-send-put-extra-stream-from-res-drawable-folder-causes-crash) to get file for selected image – ρяσѕρєя K Feb 27 '15 at 17:24
  • currentPos=pager.getCurrentItem(); currentImgId=adapter.getImageId(currentPos); bitmap = BitmapFactory.decodeResource(getResources(),adapter.GalImages[position]); – user4440416 Feb 27 '15 at 17:29
  • i have seen this it can only share image that is included but i want to share image of users choice – user4440416 Feb 27 '15 at 17:29
  • @user4440416: try to use provided link use as `input = context.getResources().openRawResource(currentImgId);` – ρяσѕρєя K Feb 27 '15 at 17:32
0
File file = new File(adapter.images.get(myPager.getCurrentItem()));
Intent mShareIntent = new Intent(Intent.ACTION_SEND);
mShareIntent.setType("image/*");    
mShareIntent.putExtra(Intent.EXTRA_STREAM,Uri.fromFile(file));  
startActivity(Intent.createChooser(mShareIntent,"Shareith:"));

Where adapter is object of CustomAdapter creating pages for viewpager, myPager is reference variable for ViewPager enter code here and images is arraylist storing imagepath.

GHajba
  • 3,665
  • 5
  • 25
  • 35