1

i have implemented an auto rotating banner with viewpager and handling images with arraylist but i want to open new activity on clicking to the banner which i had used i am not getting how to handle it listeners

Code :

package com.example.demoapp;

import android.os.Handler;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.viewpagerindicator.CirclePageIndicator;
import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;

public class MainActivity extends AppCompatActivity {

private static ViewPager mPager;
private static int currentPage = 0;
private static int NUM_PAGES = 0;
private ArrayList<ImageModel> imageModelArrayList;
private int[] myImageList = new int[]{R.drawable.ban, R.drawable.bann,
        R.drawable.banne,R.drawable.banner
        ,R.drawable.banne,R.drawable.cover};


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    imageModelArrayList = new ArrayList<>();
    imageModelArrayList = populateList();

    init();

}

public ArrayList<ImageModel> populateList(){

    ArrayList<ImageModel> list = new ArrayList<>();

    for(int i = 0; i < 6; i++){
        ImageModel imageModel = new ImageModel();
        imageModel.setImage_drawable(myImageList[i]);
        list.add(imageModel);
    }

    return list;
}

private void init() {

    mPager = (ViewPager) findViewById(R.id.pager);
    mPager.setAdapter(new SlidingImage_Adapter(MainActivity.this,imageModelArrayList));

    CirclePageIndicator indicator = (CirclePageIndicator)
            findViewById(R.id.indicator);

    indicator.setViewPager(mPager);

    final float density = getResources().getDisplayMetrics().density;

 //Set circle indicator radius
    indicator.setRadius(5 * density);

    NUM_PAGES =imageModelArrayList.size();

    // Auto start of viewpager
    final Handler handler = new Handler();
    final Runnable Update = new Runnable() {
        public void run() {
            if (currentPage == NUM_PAGES) {
                currentPage = 0;
            }
            mPager.setCurrentItem(currentPage++, true);
        }
    };
    Timer swipeTimer = new Timer();
    swipeTimer.schedule(new TimerTask() {
        @Override
        public void run() {
            handler.post(Update);
        }
    }, 3000, 3000);

    // Pager listener over indicator
    indicator.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

        @Override
        public void onPageSelected(int position) {
            currentPage = position;

        }

        @Override
        public void onPageScrolled(int pos, float arg1, int arg2) {

        }

        @Override
        public void onPageScrollStateChanged(int pos) {

        }
    });

}

}

Needed help in onclick should open new activity.i had tried various thing but it doesn't worked for me.if anyone have alternative to implement auto rotating banner with on click should open new activity

vvvvv
  • 25,404
  • 19
  • 49
  • 81

1 Answers1

0

Use a custom view pager class which can be clickable

public class ClickableViewPager extends ViewPager {

    private OnItemClickListener mOnItemClickListener;

    public ClickableViewPager(Context context) {
        super(context);
        setup();
    }

    public ClickableViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
        setup();
    }

    private void setup() {
        final GestureDetector tapGestureDetector = new    GestureDetector(getContext(), new TapGestureListener());

        setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                tapGestureDetector.onTouchEvent(event);
                return false;
            }
        });
    }

    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
        mOnItemClickListener = onItemClickListener;
    }

    public interface OnItemClickListener {
        void onItemClick(int position);
    }

    private class TapGestureListener extends GestureDetector.SimpleOnGestureListener {

        @Override
        public boolean onSingleTapConfirmed(MotionEvent e) {
            if(mOnItemClickListener != null) {
                mOnItemClickListener.onItemClick(getCurrentItem());
            }
            return true;
       }
    }
}

and implement an anonymous type listener

ClickableViewPager viewPager = (ClickableViewPager) findViewById(R.id.viewPager);
viewPager.setOnItemClickListener(new ClickableViewPager.OnItemClickListener() {
            @Override
            public void onItemClick(int position) {
                // your code
            }
        });

Refered from question ViewPager OnItemClickListener

Sai Jayant
  • 366
  • 2
  • 14