2016-01-08 8 views
6

मुझे जिस समस्या का सामना करना पड़ा वह यह है कि ViewPager पेज पर कॉल नहीं कर रहा है 0 आइटम के लिए चयन किया गया। कोड का नमूना:OnPageSlected पहले आइटम के लिए कभी नहीं कहा जाता है?

public class PagerActivity extends ActionBarActivity implements ViewPager.OnPageChangeListener { 

private static final String TAG = PagerActivity.class.getCanonicalName(); 

private ViewPager mViewPager; 

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

    setContentView(R.layout.activity_pager); 
    mViewPager = (ViewPager) findViewById(R.id.view_pager); 
    mViewPager.setAdapter(new ViewAdapter()); 
    mViewPager.setOnPageChangeListener(this); 
} 

@Override 
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
    Log.e(TAG, "position = " + position); 

} 

@Override 
public void onPageSelected(int position) { 
    Log.e(TAG, "selected page = " + position); 

} 

@Override 
public void onPageScrollStateChanged(int state) { 
    Log.e(TAG, "state = " + state); 

} 

private class ViewAdapter extends PagerAdapter { 

    @Override 
    public int getCount() { 
     return 5; 
    } 

    @Override 
    public boolean isViewFromObject(View view, Object object) { 
     return view == object; 
    } 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
     ViewGroup viewGroup = (ViewGroup) LayoutInflater.from(container.getContext()) 
       .inflate(R.layout.view_pager_item, container, false); 
     TextView textView = (TextView) viewGroup.findViewById(R.id.page_indicator); 
     textView.setText("Page position = " + position); 
     container.addView(viewGroup); 
     return viewGroup; 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     container.removeView((ViewGroup) object); 
    } 
} 

मैं कोई विशेष से संबंधित कार्य है, बस जानना चाहता था:

  • यह एक ज्ञात मुद्दा है और सबसे अच्छा समाधान क्या है?

  • क्या यह अभी इस तरह काम करने के लिए डिज़ाइन किया गया है?

उत्तर

2

OnPageChangeListener

pageChangeListener.onPageSelected(0); //Set start to 0 page 

के तहत इस जोड़े आपके मामले में:

PagerActivity.onPageSelected(0); 

हालांकि आप वर्ग से implements ViewPager.OnPageChangeListener को हटाने और इस जोड़ना चाहिए: आप

OnPageChangeListener pageChangeListener = new OnPageChangeListener() { 
    @Override 
    public void onPageScrollStateChanged(int arg0) { } 

    @Override 
    public void onPageScrolled(int arg0, float arg1, int arg2) { } 

    @Override 
    public void onPageSelected(int position) { 

     switch (position) { 
     case 0: 
       Log.e(TAG, "selected page = " + position); 
      break; 

     default: 

       Log.e(TAG, "selected page = " + position); 
      break; 
     } 
    } 
}); 
mViewPager.setOnPageChangeListener(pageChangeListener); 
pageChangeListener.onPageSelected(0); 
+0

तो मतलब बस स्थिति निर्धारित करें अपने आप से पहले प्रारंभिक? –

+0

हां ... @YuriiTsap पेज के साथ पूर्ण कोड आज़माएं चेंजलिस्टर को यह काम करना चाहिए –

+0

अगर मैं तत्काल विधि के अंदर एक चेक कर सकता हूं (स्थिति == 0) पेज पर चयन (0), लेकिन यह मेरे लिए सुरुचिपूर्ण नहीं है। –

संबंधित मुद्दे