0

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


}
eurosecom
  • 2,932
  • 4
  • 24
  • 38

2 Answers2

2

You can finish the activity with a cast:

((Activity) context).finish();
Pablo Tirado
  • 71
  • 2
  • 5
1

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

}
Community
  • 1
  • 1
Ben Pearson
  • 7,532
  • 4
  • 30
  • 50