首页 > 解决方案 > 如何通过单击我使用 viewpager 实现的横幅来打开新活动?

问题描述

viewpager我已经实现了一个带有和处理图像的自动旋转横幅,arraylist但我想在点击我使用过的横幅时打开新活动我不知道如何处理它听众

代码 :

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) {

        }
    });

}

}

在打开新活动时需要帮助。onclick我尝试了各种方法,但对我没有用。如果有人可以通过点击实现自动旋转横幅,应该打开新活动

标签: androidarraylist

解决方案


使用可点击的自定义视图寻呼机类

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

并实现一个匿名类型监听器

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

引用自问题ViewPager OnItemClickListener


推荐阅读