2012-06-16 41 views
24

Tôi đang cố gắng làm quen với ViewPager. Mã của tôi được đưa ra dưới đây. Vấn đề là các phương thức onPageChangeListener không được gọi. Những gì có thể là vấn đề?onPageScrolled() không được gọi là

public class TabsViewPagerFragmentActivity extends SherlockFragmentActivity implements ViewPager.OnPageChangeListener { 


private ViewPager mViewPager; 
private PagerAdapter mPagerAdapter; 
private PageIndicator mIndicator; 

private static final String[] CONTENT = new String[] { "Home", "Popular", "Chat", "Profile"}; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    ActionBar bar = getSupportActionBar(); 

    View customview = LayoutInflater.from(this).inflate(R.layout.actionbar_custom_layout, null); 

    ImageView im = (ImageView)customview.findViewById(R.id.add); 

    /*im.getLayoutParams().height = h; 
    im.getLayoutParams().width = h;*/ 

    bar.setCustomView(customview); 
    bar.setDisplayShowCustomEnabled(true); 
    bar.setDisplayShowTitleEnabled(false); 
    bar.setDisplayShowHomeEnabled(false); 
    // Inflate the layout 
    setContentView(R.layout.tabs_viewpager_layout); 


    // Intialise ViewPager 
    this.intialiseViewPager(); 

    mIndicator = (TitlePageIndicator)findViewById(R.id.titles); 
    mIndicator.setViewPager(mViewPager); 

    TitlePageIndicator indicator = (TitlePageIndicator)findViewById(R.id.titles); 

    indicator.setTextColor(0xAAfb891e); 
    indicator.setSelectedColor(0xFFfb891e); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 


    menu.add("Search") 
     .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT); 


    return true; 
} 



public int getCount() { 
    return CONTENT.length; 
} 


protected void onSaveInstanceState(Bundle outState) { 

    super.onSaveInstanceState(outState); 
} 
private void intialiseViewPager() { 


    this.mPagerAdapter = new PagerAdapter(super.getSupportFragmentManager(), 
              fragments); 

    this.mViewPager = (ViewPager)super.findViewById(R.id.viewpager); 
    this.mViewPager.setAdapter(this.mPagerAdapter); 
    this.mViewPager.setOnPageChangeListener(this); 



} 

public void onPageScrolled(int position, float positionOffset, 
     int positionOffsetPixels) { 
    // TODO Auto-generated method stub 

    System.out.println(positionOffsetPixels); 

} 

public void onPageSelected(int position) { 
    // TODO Auto-generated method stub 

    System.out.println(position); 
} 


public void onPageScrollStateChanged(int state) { 
    // TODO Auto-generated method stub 

    System.out.println(state); 

} 
} 

Điều tôi muốn nói là tôi không nhận được bất kỳ nội dung nào được in trong Logcat khi cuộn trang của tôi.

+0

bạn có thể đăng mã nơi bạn đang xác định mIndicator không? – FoamyGuy

+0

mIndicator là gì –

+0

Xin lỗi rằng mIndicator là viewpagerindicator ... this.mViewPager.setOnPageChangeListener (mIndicator); đã thực sự ban đầu this.mViewPager.setOnPageChangeListener (điều này); Tôi đã thay đổi chỉ để xem những gì đã xảy ra nhưng điều đó đã không giúp đỡ ... – ProgrAmmar

Trả lời

119

Tôi đã tự khắc phục sự cố sau một số lỗi dùng thử.

Vì tôi đã giới thiệu một TitlePagerIndicator 'mIndicator', tôi đã phải gọi mIndicator.setOnPageChangeListener (điều này); và không mViewPager.setOnPageChangeListener (điều này);

+5

Cảm ơn. Nó tiết kiệm đầu của tôi. Nhưng, bạn có thể cho tôi biết lý do không? –

+9

Tôi tưởng tượng OP đang sử dụng một cái gì đó như http://viewpagerindicator.com/ rằng nội bộ đặt 'onPageChangeListener' và vì vậy bất kỳ được thiết lập theo lập trình sẽ được dereferenced – Dori

+0

CÓ, CUỐI CÙNG. Tôi đang sử dụng lib viewpagerindicator và người nghe phải được gắn vào chỉ báo chứ không phải với người xem. Cảm ơn! – Roberto

0

Cách bạn đã viết mã của bạn tôi đoán bạn đang thực hiện ViewPager.OnPageChangeListener

Thay đổi

this.mViewPager.setOnPageChangeListener(mIndicator);

Để

this.mViewPager.setOnPageChangeListener(this);

+0

Thực ra nó chỉ là "cái này", tôi vừa thay đổi nó để xem hiệu ứng. Nhưng dù sao, thay đổi mIndicator thành sự trợ giúp này. – ProgrAmmar

+0

đăng toàn bộ mã nguồn của bạn tại đây. –

+0

Tôi đã chỉnh sửa câu hỏi của mình bằng mã đầy đủ. – ProgrAmmar

2

Dòng System.out không in để Logcat . Sử dụng lớp Log thay vì như Log.d("MyApp","message").

+0

Tôi đã sử dụng System.out.println() trước đây để in các giá trị động trong logcat trước đó. Nhưng sau đó bệnh quá cố gắng này. – ProgrAmmar

0

Tôi đã làm theo các mẹo ở trên nhưng không hoạt động đối với tôi. Trong trường hợp của tôi, tôi đã sử dụng: mIndicator.setCurrentItem(position);

Điều này có thể giúp ai đó!

Các vấn đề liên quan