Search code examples
androidandroid-pageradapter

How can i finish activity in pageradpter?


I use pageradapter where i have button that call other ativity. Can i finish pageractivity after calling secondactivity. My pageradapter code is below. The method finish() is undefined for the type new View.OnClickListener(){} Thanks.

public class ImageAdapterFromRes extends PagerAdapter {


    Context context;
    ArrayList<String> textArray;
    ArrayList<String> urlArray;
    ArrayList<Bitmap> bitmapArray;
    ImageView imageView;
    TextView textreklama1;
    Button btnZoznam;
    public Activity activity;

    private int[] GalImages = new int[] { 
            //Images from resource folder.
        R.drawable.one,  
        R.drawable.two,
        R.drawable.three
    };

    ImageAdapterFromRes(Context context, ArrayList<String> textArray, ArrayList<String> urlArray, ArrayList<Bitmap> bitmapArray){
        this.context=context;
        this.textArray=textArray;
        this.urlArray=urlArray;
        this.bitmapArray=bitmapArray;
    }

    @Override
    public int getCount() {
        return GalImages.length;
    }

    public Object instantiateItem(ViewGroup collection, int position) {
         LayoutInflater inflater = (LayoutInflater) collection.getContext()
         .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

         View view = inflater.inflate(R.layout.reklamator_new, null);

         imageView = (ImageView) view.findViewById(R.id.imgreklama1);
         imageView.setImageBitmap(bitmapArray.get(position));

         textreklama1 = (TextView) view.findViewById(R.id.textreklama1);
         textreklama1.setText(textArray.get(position).toString());

         btnZoznam = (Button) view.findViewById(R.id.btnZoznam);
         btnZoznam.setOnClickListener(new View.OnClickListener() {

             @Override
             public void onClick(View v) {

                 Intent i = new Intent(v.getContext(), SecondActivity.class);
                 Bundle extras = new Bundle();
                 extras.putString("cat", "1");
                 i.putExtras(extras);
                 context.startActivity(i);
                 //finish(); ???????? HOW FINISH ?

             }
         });

         ((ViewGroup) collection).addView(view, 0);
         return view;
         }

         @Override
         public void destroyItem(ViewGroup arg0, int arg1, Object arg2) {
         ((ViewGroup) arg0).removeView((View) arg2);
         }

         @Override
         public boolean isViewFromObject(View arg0, Object arg1) {
         return arg0 == ((View) arg1);
         }


}

Solution

  • I would suggest the activity handles what it does (You might place it in a fragment at a later date).

    You could simply to ((Activity) context).finish(), but I tend to favour composition over aggregation.

    Here's a quick snippet:

    public class ImageAdapterFromRes extends PagerAdapter {
    
        OnPagerItemSelected mListener;
        Context context;
    
        ImageAdapterFromRes(Context context, ArrayList<String> textArray, ArrayList<String> urlArray, ArrayList<Bitmap> bitmapArray,
            OnPagerItemSelected listener
            ){
    
            this.context=context;
            this.textArray=textArray;
            this.urlArray=urlArray;
            this.bitmapArray=bitmapArray;
    
            this.mListener = listener;
        }
    
        @Override
        public int getCount() {
            return GalImages.length;
        }
    
        public Object instantiateItem(ViewGroup collection, int position) {
    
             btnZoznam.setOnClickListener(new View.OnClickListener() {
    
                 @Override
                 public void onClick(View v) {
    
                     Intent i = new Intent(v.getContext(), SecondActivity.class);
                     Bundle extras = new Bundle();
                     extras.putString("cat", "1");
                     i.putExtras(extras);
                     context.startActivity(i);
                     //finish(); ???????? HOW FINISH ?
    
                     mListener.pagerItemSelected();
                 }
             });
         }
    
         public interface OnPagerItemSelected {
             void pagerItemSelected();
         }
    
    
    }
    

    Notice there's a listener and the pagerItemSelected() method is called when an item is clicked.

    This means you can do this on your activity (or fragment, or other component):

    public class MyActivity extends Activity implements OnPagerItemSelected {
    
        void setUpPager() {
            new ImageAdapterFromRes(this, ..., ..., ..., this);
        }
    
        void pagerItemSelected() {
            finish();
        }
    
    }