KPRF2009 2012-11-15 21:46 采纳率: 50%
浏览 45556
已采纳

Android ViewPager 怎么添加点击监听器?

我想对旋转的子view 添加监听事件。。。求高手帮助!!!!

我在网上找到的一个ViewPager 自动旋转的例子

高仿优酷自动滑动 http://download.csdn.net/detail/t12x3456/4751688

我想给每一个view加上一个监听器。。。我试了很久还是不会。。。

  • 写回答

15条回答 默认 最新

  • qq_23291497 2014-11-20 02:52
    关注

    viewPager.setAdapter(new MyAdapter());
    viewPager.setOnPageChangeListener(onPageChangeListener);

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • Eiseno 2013-01-10 06:13
    关注
    public class ViewPagerActor extends LinearLayout{
     private ViewPager viewPager;
     private MyAdapter myAdapter;
     private List<View> lists;
     public ViewPagerActor(Context context, AttributeSet attrs) {
      super(context, attrs);
      LayoutInflater inflater =LayoutInflater.from(context);
      inflater.inflate(R.drawable.actor_viewpager_layout, this, true);
      viewPager = (ViewPager)findViewById(R.id.viewpager);//这个滚动页面
     }
    
     public void setDates(List<View> lists){
      this.lists = lists;
     }
     public void initDisplay(){
      myAdapter = new MyAdapter(lists);
      viewPager.setAdapter(myAdapter);
     }
     public void notifyDataSetChanged(){
      myAdapter.notifyDataSetChanged();
     }
    
     /**
      * 设置显示第几页
      * @param count
      */
     public void setCurrentItem(int count){
      viewPager.setCurrentItem(count);
     }
    
     /**
      * 为 viewPager 添加换页监听器
      * @param onPageChangeListener
      */
     public void setOnPageChangeListener(OnPageChangeListener onPageChangeListener){
      viewPager.setOnPageChangeListener(onPageChangeListener);
     }
    
     /**
      * viewPager 固定的适配器 继承PagerAdapter
      * @author Administrator
      *
      */
     class MyAdapter extends PagerAdapter {
      private List<View> views;
    
      public MyAdapter(List<View> lists){
       this.views = lists;
      }
      @Override
      public int getCount() {
       return views.size();
      }
    
      @Override
      public boolean isViewFromObject(View arg0, Object arg1) {
       return arg0 == arg1;
      }
    
      @Override
      public int getItemPosition(Object object) {
       return super.getItemPosition(object);
      }
    
      @Override
      public void destroyItem(View arg0, int arg1, Object arg2) {
       if(views.get(arg1)!=null){
        ((ViewPager)arg0).removeView(views.get(arg1));
       }
      }
    
      @Override
      public Object instantiateItem(View arg0, int arg1) {
       ((ViewPager)arg0).addView(views.get(arg1),0);   
       return views.get(arg1); 
      }
     }
    }
    

    上面的类你可以保存下来了 那是个通用的滑动切屏

    将上面的类 注入到你要运行的activity类的xml中
    在activity中

    View compassView = makeCompassView();第一个页面 
      compassView.setOnClickListener(this.addUueeyeListener);//这个就是加监听器 
      如果你想给这个view中的别的控件加监听一样 直接掉例如
     compassView.findViewBy().set监听
      View dataView = makeDataView();第二个页面
      this.viewDatas.add(compassView);
      this.viewDatas.add(dataView);
      this.viewPagerActor.setDates(this.viewDatas);赋值给上面滑动中
      this.viewPagerActor.initDisplay();//上面有这个方法你自己看
    

    我也不知道这个可以不,网上搜的,你可以试试

    评论
  • zhang625480 2013-09-25 07:34
    关注

    我把这个demo修改了一下。。。可以动态添加小点的数目,并且添加了点击事件。。目前点击后会提示点击了哪一个。。。,要的话加我QQ:284176935

    评论
  • 哎,真难 2014-11-18 03:18
    关注

    你还是给出代码来看吧,,,

    评论
  • qq_23501439 2014-11-18 14:47
    关注

    demo修改了一下 ,加QQ841143577

    评论
  • nowhere___boy 2014-11-19 02:32
    关注

    不是什么每个view加监听,你把view装进list,list加载到pageAdapter,给viewpager设置监听,监听的就是全部view,要实现这种图片轮播(广告栏效果),就是一句关键代码viewPager.setCurrentItem(msg.arg1);,利用handler和thread,每隔几秒改变item的下标。

    viewPager.setAdapter(new MyAdapter());
    viewPager.setOnPageChangeListener(onPageChangeListener);
    http://download.csdn.net/detail/u013372185/8075709

    评论
  • 小白兔设计大神 2014-11-20 06:25
    关注

    viewPager.setAdapter(new MyAdapter());
    viewPager.setOnPageChangeListener(onPageChangeListener);

    评论
  • you456789zhiping 2014-11-20 13:32
    关注

    viewpager是不是经过inflater绑定的,那么你的布局里面需要存在这个按钮,在inflater之后返回的view中find到这个布局中的button,然后设置点击事件。

    评论
  • 湘-枫叶情缘 2014-11-20 23:28
    关注

    这是我的个人笔记,你自己去瞧瞧,也许对你有帮助!
    ViewPage来源于android -support.v4

    1. 什么是viewPage?
      ViewPage 类似于ListView 用于显示多个View集合. 支持页面左右滑动.

    2. 如何使用viewPage以及需要注意点?
      ViewPage 需要Adapter:
      PagerAdapter 有四个重要方法:
      (1) void destroyItem(ViewGroup container, int position, Object object): 销毁
      (2)Object instantiateItem(ViewGroup container, int position) : 添加View
      (3) int getCount() : 获得View总是
      (4) boolean isViewFromObject(View view, Object obj) : View比较

      监听器: setOnPageChangeListener :页面发生改变
      (1) void onPageSelected(int position) :View进行切换 :position 新的页面位置
      (2) void onPageScrolled(int arg0, float arg1, int arg2) :页面正在滚动的时候[滑动偏移信息],回调
      (3) void onPageScrollStateChanged(int arg0) :页面状态发生变化的时候,回调

    ListView 因为使用相同的View,所以采用复用。
    而ViewPage ,是基于View ,子类有许多不同,所以要注销.

    public Object instantiateItem(ViewGroup container, int position) {
    // TODO Auto-generated method stub
    View view= imageVisws.get(position % images.length);
    container.removeView(view); // 重复加入会引起异常
    container.addView(view);
    return view;

    导致异常:java.lang.IllegalStateException The specified child already has a parent. You must call removeView()
    原因: 被加入的View 有父类, 所以添加到另外一个集合中之前,必须清除父类.
    }

    评论
  • 123766 2014-11-28 01:11
    关注

    uiop123uiop123***[

    `
    strong text

    • uiop123 ----------

    `

    ]1***

    评论
  • 坚持就有希望 2014-11-30 03:11
    关注

    楼主 对每个View加监听在哪个地方加的监听?

    评论
  • 青帘幽梦 2014-12-01 13:05
    关注

    viewpager是不是经过inflater绑定的,
    那么你的布局里面需要存在这个按钮,
    在inflater之后返回的view中find到这个布局中的button,然后设置点击事件。

    评论
  • qq_21555803 2014-12-24 02:17
    关注

    demo修改了一下 ,加QQ841143577demo修改了一下 ,加QQ841143577

    评论
  • LaBanCheDe 2015-04-18 10:50
    关注

    朋友,我想问问你问题解决了没有,我也想实现同样的功能。。。。

    评论
  • 守护者ly 2015-04-28 23:32
    关注

    public Object instantiateItem(ViewGroup container, final int position)
    {

    ImageView imageView = new ImageView(getActivity().getApplicationContext());
    imageView.setImageBitmap(bitmap[position]);
    container.addView(imageView);
    mImageViews[position] = imageView;
    mImageViews[position].setOnClickListener(new View.OnClickListener() {

                            public void onClick(View view) {
                                isInternetPresent = cd.isConnectingToInternet();
                                // TODO Auto-generated method stub
                                if(isInternetPresent)
                                {
                                    Intent intent = new Intent();
                                    intent.setClass(getActivity(), WebViewAct.class);
                                    intent.putExtra("url", NewsImage[position][Common.JURL]);
                                    intent.putExtra("key2", NewsImage[position][Common.NAME]);
                                    startActivity(intent);
                                }
                                else
                                {
                                    Toast.makeText(getActivity(), "无网络", Toast.LENGTH_SHORT).show();
                                }
                            }
                        });
                        return imageView;
                    }
    
     public Object instantiateItem(ViewGroup container,  final int position)
                        {   
                            ImageView imageView = new ImageView(getActivity().getApplicationContext()); 
                            imageView.setImageBitmap(bitmap[position]);
                            container.addView(imageView);
                            mImageViews[position] = imageView;
                            mImageViews[position].setOnClickListener(new View.OnClickListener() {
    
                                public void onClick(View view) {
                                    isInternetPresent = cd.isConnectingToInternet();
                                    // TODO Auto-generated method stub
                                    if(isInternetPresent)
                                    {
                                        Intent intent = new Intent();
                                        intent.setClass(getActivity(), WebViewAct.class);
                                        intent.putExtra("url", NewsImage[position][Common.JURL]);
                                        intent.putExtra("key2", NewsImage[position][Common.NAME]);
                                        startActivity(intent);
                                    }
                                    else
                                    {
                                        Toast.makeText(getActivity(), "无网络", Toast.LENGTH_SHORT).show();
                                    }
                                }
                            });
                            return imageView;
                        }
    
    评论
查看更多回答(14条)

报告相同问题?

悬赏问题

  • ¥15 docker无法进入容器内部
  • ¥15 qt https 依赖openssl 静态库
  • ¥15 python flask 报错
  • ¥15 改个密码引发的项目启动问题
  • ¥100 CentOS7单线多拨
  • ¥15 debian安装过程中老是出现无法将g21dr复制到g21dr怎么解决呀?
  • ¥15 如何用python实现跨工作簿的指定区域批量复制粘贴
  • ¥15 基于CH573f的雷迪安CR1400m通讯代码
  • ¥15 matlab m文件如何与matla app designer 数据交互?
  • ¥15 c++数据结构与算法问题