2015-12-21 75 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

相關問題