为ViewPager设置监听器-内部控件+viewpager本身

viewPager = (ViewPager) findViewById(R.id.guide_view);    

        viewPager.setAdapter(new MyAdapter());// 设置填充ViewPager页面的适配器    
        // 设置一个监听器,当ViewPager中的页面改变时调用    
        viewPager.setOnPageChangeListener(new MyPageChangeListener());
/页面切换的监听器
	class pagerViewListener implements OnPageChangeListener{		
		//三种状态,0为空闲,1为滑动,2为加载完毕		
		@Override
		public void onPageScrollStateChanged(int arg0) {
//arg0 ==1的时候表示正在滑动,arg0==2的时候表示滑动完毕了,arg0==0的时候表示什么都没做,就是停在那。
			// TODO Auto-generated method stub			
		}		
		//界面1滑动到界面2,在界面1滑动前调用
		@Override
		public void onPageScrolled(int arg0, float arg1, int arg2) {
			// TODO Auto-generated method stub 表示在前一个页面滑动到后一个页面的时候,在前一个页面滑动前调用的方法。		
		}
		//从界面1到界面2,2页加载后调用...
		@Override
		public void onPageSelected(int arg0) {//arg0是表示你当前选中的页面,这事件是在你页面跳转完毕的时候调用的。
			// TODO Auto-generated method stub
		}		
	}

/** 指引页面改监听器 */
class GuidePageChangeListener implements OnPageChangeListener {
@Override
public void onPageScrollStateChanged(int arg0) {
//Log.i(“voice”, arg0+ “————-onPageScrollStateChanged”);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-geneLog.i(“voice”, arg0+ ” ” + arg1 +”  ” + arg2  +”————-onPageScrolled”);
//              if(currPage==5){
//                  HelpActivity.this.finish();
//              }rated method stub
}

@Override
public void onPageSelected(int arg0) {
currPage = arg0;
for (int i = 0; i < imageViews.length; i++) {
imageViews[arg0].setBackgroundResource(R.drawable.page_indicator_focused);
if (arg0 != i) {
imageViews[i].setBackgroundResource(R.drawable.page_indicator);
}
}

}
mPager = (ViewPager) findViewById(R.id.vPager);
mPager.setAdapter(new MyPagerAdapter(listViews));
mPager.setOnPageChangeListener(new MyOnPageChangeListener());

viewpager中嵌套viewpager – 跳转到另一个viewpager,rather set one inside the other

  • Set the listener on the image inside instantiateItem():
@Override
        public Object instantiateItem(View collection, int position) {
            final LayoutInflater inflater = getLayoutInflater(); 
            View layout = inflater.inflate(R.layout.my_layout, null);
            final ImageView image = (ImageView)layout.findViewById(R.id.image_display);
            final int cPos = position;
            image.setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    ImageView i = (ImageView)v; //The "v" in "public void onClick(View v)" is the image that was clicked. A new OnClickListener is set directly on each ImageView.
                    if(cPos == 0)
                    {
                        //...
                    }
                    //...
                }
            });
            return layout;
        }

Alternatively, you could use the ImageView.setTag() method to include data about what Activity to launch. e.g.

I have an ImageView with onTouchListener inside a ViewPager. Of course the ImageView‘s listener fires off when I try to change ViewPager‘s page. Is there a way to prevent it. I guess I need to recognize touch from swipe somehow.
解决ViewPager嵌套后子ViewPager不能滑动的方法
重写父ViewPager,并在父ViewPager重载onInterceptTouchEvent方法,并返回false,具体是:
@Override
public boolean onInterceptTouchEvent(MotionEvent motionEvent ) {
return false;
}   

这样,子ViewPager就能滑动了。
在删除或者修改数据的时候,PagerAdapter无法像BaseAdapter那样仅通过notifyDataSetChanged方法通知刷新View。

  • 针对于child view比较简单的情况:可以在自己的Adapter中加入代码:public int getItemPosition(Object object) {   return POSITION_NONE; } //调用 notifyDataSetChanged方法会让ViewPager通过Adapter的getItemPosition方法查询一遍所有child view,这种情况下,所有child view位置均为POSITION_NONE,表示所有的child view都不存在,ViewPager会调用destroyItem方法销毁,并且重新生成,加大系统开销,并在一些复杂情况下导致逻辑问题。特别是对于 只是希望更新child view内容的时候,造成了完全不必要的开销。
  • 更有效地方法:更为靠谱的方法是因地制宜,根据自己的需求来实现notifyDataSetChanged的功能,比如,在仅需要对某个View内容进行更新时,在instantiateItem()时,用View.setTag方法加入标志,在需要更新信息时,通过findViewWithTag的方法找到对应的View进行更新即可。

ScrollView中嵌入ViewPager,ViewPager的滑动出现问题:

在滑动ViewPager进行切换时,必须完全保持水平的滑动。如若进行滑动的时候滑动方向发生了倾斜,就会触发ScrollView的滚动事件,而ViewPager的滑动也会终止并变回原来的样子。怎样才能让在ViewPager进行滑动时ScrollView不滚动。试过重写ScrollView的onTouchEvent,但是没有效果。

ViewPager 嵌套在另外一个 ViewPager 中

左右滑动的时候只能切换最外层的 ViewPager,在有子ViewPagger的时候,左右滑动 是对这个 子VIewPager进行滑动,而不是外层的ViewPager

 

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

生活在西班牙

自己动手丰衣足食

BlueAsteroid

Just another WordPress.com site

Jing's Blog

Just another WordPress.com site

Start from here......

我的心情魔方

天才遠私廚

希望能做一個分享各種資訊的好地方

语义噪声

西瓜大丸子汤的博客

笑对人生,傲立寰宇

Just another WordPress.com site

Where On Earth Is Waldo?

A Project By Melanie Coles

the Serious Computer Vision Blog

A blog about computer vision and serious stuff

Cauthy's Blog

paper review...

Cornell Computer Vision Seminar Blog

Blog for CS 7670 - Special Topics in Computer Vision

datarazzi

Life through nerd-colored glasses

Luciana Haill

Brainwaves Augmenting Consciousness

槑烎

1,2,∞

Dr Paul Tennent

and the university of nottingham

turn off the lights, please

A bunch of random, thinned and stateless thoughts around the Web

%d bloggers like this: