2015-12-21 390 views
1

我有我的android应用程序中的图像和文本viewPager,我的目标是创建一个runnable让这个视图页面自动滚动,而我的另一个目标是当用户点击这个项目viewpager我需要去另一个活动。Android viewpager调用setCurrentitem没有onPageSelected

这是我可以运行:

 final Handler handler = new Handler(); 

     final Runnable Update = new Runnable() { 


      public void run() { 
       if (currentPage == NUM_PAGES - 1) { 
        currentPage = -1; 
       } 
       pager.setCurrentItem(currentPage++,true); 
       pager.setScrollBarFadeDuration(R.styleable.CirclePageIndicator_fillColor); 
       pager.setScrollDurationFactor(4); 
       mIndicator.setCurrentItem(currentPage++); 
      } 
     }; 

     swipeTimer = new Timer(); 
     swipeTimer.schedule(new TimerTask() { 

      @Override 
      public void run() { 
       handler.post(Update); 
      } 
     }, 1000, 3000); 

的问题是,每次可运行的呼叫“SetCurrentItem()”的使用onPageSelected函数被调用,然后活动被打开。那么如何防止每3秒调用setCurrentItem时调用onpageselected?

  pager.setOnPageChangeListener(new OnPageChangeListener() { 

      @Override 
      public void onPageSelected(int arg0) { 
       // TODO Auto-generated method stub 

       Picture current = (Picture)pageAdapter.getItem(arg0); 
       Article a = getArticleById(current.getArticleId(), p); 
       Bundle bundle=new Bundle(); 
       Intent intent = new Intent(); 
       intent.setClass(HomePageActivity.this,DetailActivity.class); 
       //.getString(tag))); 
       bundle.putParcelable("article", a); 
       bundle.putParcelableArrayList("pic", a.getPic()); 
       intent.putExtras(bundle); 
       intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
       startActivity(intent); 

      } 

      @Override 
      public void onPageScrolled(int arg0, float arg1, int arg2) { 
       // TODO Auto-generated method stub 
       currentPage=arg0; 
       //mIndicator.setCurrentItem(arg0); 
      } 

      @Override 
      public void onPageScrollStateChanged(int arg0) { 
       // TODO Auto-generated method stub 

      } 
     }); 

回答

1

您应该向适配器内的ViewPager项目添加点击侦听器。 onPageSelected方法不听点击事件。

在你ViewPager适配器instantiateItem方法,这样做:

LayoutInflater inflater = (LayoutInflater) collection.getContext() 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

View rootView = inflater.inflate(R.layout.your_layout, null); 

rootView.setOnClickListener(new OnClickListener(){ 
    public void onClick(View v){ 
     //do the click thing 
    } 
}); 

container.addView(rootView); 
return rootView; 
+0

它的工作,但不是整个布局,我做onclicklistener为ImageView的唯一 – Amalo

+0

你可以修改它取决于你所需要的东西。如果要管理活动/片段中的点击事件,还可以使用自己的侦听器。 – iamkaan