2011-09-13 8 views
55

私は次のコードを使用しています.MAXは2ページです。デフォルトでは、位置は0で、新しいページが右側に追加されます。私は2つのレイアウトファイルを膨らませます。AndroidのViewPagerのデフォルトページを設定します。

アプリの起動時にページ1を表示し、新しいページを左側に追加するにはどうすればよいですか?おかげさまで

main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 


    <android.support.v4.view.ViewPager 
     android:layout_width="wrap_content" android:layout_height="wrap_content" 
     android:id="@+id/pagerView" /> 


</LinearLayout> 

Javaコード

public class MyPagerActivity extends Activity { 
    private Context context;  
    private int pageNumber; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     context = this; 

     ViewPager pagerView = (ViewPager)findViewById(R.id.pagerView); 
     pagerView.setAdapter(new AwesomePagerAdapter());  

    } 


    private class AwesomePagerAdapter extends PagerAdapter{ 

     @Override 
     public void destroyItem(View collection, int position, Object view) { 
      ((ViewPager) collection).removeView((View)view);    
     } 

     @Override 
     public void finishUpdate(View arg0) { 
      //setPageTitles(getPageNumber()); 
     } 

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

     @Override 
     public Object instantiateItem(View collection, int position) { 
      /* TextView tv = new TextView(MyPagerActivity.this); 
     tv.setText("Bonjour PAUG " + position); 
     tv.setTextColor(Color.WHITE); 
     tv.setTextSize(30); 

     ((ViewPager) collection).addView(tv,0); 

     return tv;*/ 

      View view = getViewToShow(position); 
      ((ViewPager) collection).addView(view,0); 
      return view; 
     } 

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

     @Override 
     public void restoreState(Parcelable arg0, ClassLoader arg1) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public Parcelable saveState() { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public void startUpdate(View arg0) { 
      // TODO Auto-generated method stub 

     } 

    } 


    private View getViewToShow(int position){ 
     View view = null; 
     View layout; 
     LayoutInflater mInflater = (LayoutInflater) 
     context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     switch(position){ 

     case 0: 
      layout = mInflater.inflate(R.layout.elements, null); 
      view = layout; 
      break; 
     case 1: view = 
      layout = mInflater.inflate(R.layout.elements2, null); 
     view = layout; 

     break; 
     } 
     return view; 
    } 

} 

答えて

115

あなたがsetCurrentItemメソッドを使用してみましたか?

+0

これは機能します。ありがとう。 – dcanh121

-1

このソリューションは、ページャアダプタクラスの外部からの干渉なしにデフォルトページを設定する機能を提供します。

@Override 
public Object instantiateItem(ViewGroup container, int position) { 
    View currentPage = null; 
    switch(position){ 
     case 0: 
      currentPage = LayoutInflater.from(context).inflate(R.layout.page0, null)  
      break; 
     case 1: 
      currentPage = LayoutInflater.from(context).inflate(R.layout.page1, null)  
      ///////////// This page will be default //////////////////// 
      ((ViewPager)container).setCurrentItem(position); 
      //////////////////////////////////////////////////////////// 
      break; 
     case 2: 
      currentPage = LayoutInflater.from(context).inflate(R.layout.page2, null)  
      break; 
    return currentPage; 
} 
37

解決方法は問題ありませんが、アダプタの設定後にこのメソッドを呼び出すことが重要です。

viewPager.setAdapter(adapterViewPager); 
    viewPager.setCurrentItem(1); 
4

既定では、現在の値1を設定して、既定のビューを1つだけ表示する必要があります。 setCurrentItemを1に設定しないと、何も表示されません。

viewPager.setAdapter(adapterViewPager); 
viewPager.setCurrentItem(1) 
関連する問題