Search code examples
androidandroid-viewpager

Get image and title from viewpager on buttonclick


I have a viewpager. There is a button layout. When a user clicks on it, it should give the data from the current image. But it gives the title from the next image.

 @Override
    public Object instantiateItem(ViewGroup container, int position) {

        layoutInflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = layoutInflater.inflate(R.layout.image_fullscreen_preview, container, false);

        imageViewPreview = (ImageView) view.findViewById(R.id.image_preview);
        imageViewPreview.setOnTouchListener(new ImageMatrixTouchHandler(view.getContext()));
        Photos image = images.get(position);

        img_title = image.getTitle();


        Glide.with(getActivity())
                .load(image.getUrl())
                .thumbnail(Glide.with(getActivity()).load(R.drawable.loader))
                .fitCenter()
                .crossFade()
                .into(imageViewPreview);
        Button  save_img = (Button) view.findViewById(R.id.save_img);
        save_img.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Toast.makeText(getActivity(), img_title, Toast.LENGTH_SHORT).show();
            }
        });
        share_img.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                shareImage(view);
            }
        });


        container.addView(view);
        return view;

    }

How can I get the title from the current image?


Solution

  • Because ViewPager initializes three objects: an object at the current position, an object from the previous position and an object from the next position. And as I see you update the img_title each time and object is initializing

    img_title = image.getTitle();
    

    All what you have to do is make it a local variable:

    @Override
        public Object instantiateItem(ViewGroup container, int position) {
    
            layoutInflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View view = layoutInflater.inflate(R.layout.image_fullscreen_preview, container, false);
    
            imageViewPreview = (ImageView) view.findViewById(R.id.image_preview);
            imageViewPreview.setOnTouchListener(new ImageMatrixTouchHandler(view.getContext()));
            Photos image = images.get(position);
    
            final String img_title = image.getTitle();
    
    
            Glide.with(getActivity())
                    .load(image.getUrl())
                    .thumbnail(Glide.with(getActivity()).load(R.drawable.loader))
                    .fitCenter()
                    .crossFade()
                    .into(imageViewPreview);
            Button  save_img = (Button) view.findViewById(R.id.save_img);
            save_img.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
    
                    Toast.makeText(getActivity(), img_title, Toast.LENGTH_SHORT).show();
                }
            });
            share_img.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    shareImage(view);
                }
            });
    
    
            container.addView(view);
            return view;
    
        }