2012-12-26 3 views
1

ViewPager에서 프래그먼트를 사용하는 많은 애플리케이션을 알고 있습니다. 내 신청서에도 필요합니다. 나는 그것을 할 수있는 방법을 찾을 가이드가 없다. this. 그리고 내 코드는 다음과 같습니다.ViewPager에서 조각을 올바르게 사용하는 방법은 무엇입니까?

public class MainActivity extends FragmentActivity { 

    Vector<Fragment> fragments; 
    ViewPager viewPager; 

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

     viewPager = (ViewPager) findViewById(R.id.pager); 

     fragments = new Vector<Fragment>(); 
     fragments.add(Fragment.instantiate(this, Fragment1.class.getName())); 
     fragments.add(Fragment.instantiate(this, Fragment2.class.getName())); 

     viewPager.setOffscreenPageLimit(fragments.size()); 
     PagerAdapter pagerAdapter = new PagerAdapter(super.getSupportFragmentManager(), fragments); 

     viewPager.setAdapter(pagerAdapter); 

     viewPager.setCurrentItem(0); 
    } 

    class PagerAdapter extends FragmentPagerAdapter { 

     private List<Fragment> fragments; 

     public PagerAdapter(FragmentManager fm, List<Fragment> fragments) { 
      super(fm); 
      this.fragments = fragments; 
     } 

     @Override 
     public Fragment getItem(int position) { 
      return this.fragments.get(position); 
     } 

     @Override 
     public int getCount() { 
      return this.fragments.size(); 
     } 

    } 

} 

그러나이 코드는 제대로 작동하지 않습니다. 때로는 getActivity()가 null을 반환하는 것에 대해 Fragment1에서 오류가 발생합니다. 나는이 사이트 및이 오류에 대한 다른 많은 게시물을 읽고 지금은 나쁜 방법입니다 - 조각을 저장하기 위해 벡터를 사용합니다. 그러나 여전히 잘 모르겠다. ViewPager를 조각으로 적절하게 사용하는 방법. 도와주세요.

+1

'ViewPager'를 보여주는 샘플 응용 프로그램의 95 %가 'ViewPager'에서 조각을 사용하여 시연하므로, * 구체적으로 * 당신을 혼란스럽게합니까? – CommonsWare

+0

아마도 클래스의 이름을 바꾸어야합니다. 이미 Android에 PagerAdapter 클래스가 있습니다. – Matthieu

+1

그리고 ViewPager의 Fragments에 대한 자습서가 많이 있습니다. http://tamsler.blogspot.com/2011/10/android-viewpager --and-fragments.html, http://thepseudocoder.wordpress.com/2011/10/05/android-page-swiping-using-viewpager/, http://alchemiasoft.wordpress.com/2012/02/15/ ~ with-a-viewpager/...- – Matthieu

답변

1

처음에는 개념을 이해하는 데 어려움이 있었지만 완전히 이해했다고 말하지는 않습니다.

1 단계 : 그러나, 여기

내가 내 샘플 응용 프로그램에서 조각을 사용하고 방법

public class AllPagesAdapter extends FragmentStatePagerAdapter { 



      public AllPagesAdapter(FragmentManager fm) { 

       super(fm); 

      } 

      @Override 
      public Fragment getItem(int index) { 

     switch (index) { 
      case 0: 

       return new Fragment1(); 

      case 1: 

       return new Fragment2(); 
      case 2: 

       return new Fragment3(); 

      case 3: 

       return new Fragment4(); 

      case 4: 

       return new Fragment5(); 


     } 
     return null; 


    } 

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

} 

2 단계 : 내 어댑터를 만들기 주요 활동, 나는이 조각 활동을 확장하고 구현하고 ActionBar.TabListener. 여기에 내가 그 일을하고있다 방법은 다음과 같습니다

public class SomeActivity extends FragmentActivity implements ActionBar.TabListener { 

    public ViewPager viewPager; 
    private AllPagesAdapter mAdapter; 
    private ActionBar actionBar; 
    private String [] tabs = {"Fragment1","Fragment2","Fragment3","Fragment4","Fragment5"}; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     //Initializing all stuff 
     viewPager = (ViewPager)findViewById(R.id.pager); 

     actionBar = getActionBar(); 
     mAdapter = new AllPagesAdapter(getSupportFragmentManager()); 
     viewPager.setAdapter(mAdapter); 
     actionBar.setHomeButtonEnabled(true); 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 



     //Add the tabs here 
     for(String tab_name:tabs){ 
      actionBar.addTab(actionBar.newTab().setText(tab_name).setTabListener(this)); 
     } 

     viewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener(){ 

      @Override 
     public void onPageSelected(int position){ 

       //on Page change, that particular page should be selected 
       actionBar.setSelectedNavigationItem(position); 
      } 

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

      } 
      @Override 
     public void onPageScrollStateChanged(int position){ 

      } 

     }); 
    } 



    @Override 
    public void onTabSelected(Tab tab, FragmentTransaction fragmentTransaction) { 

     viewPager.setCurrentItem(tab.getPosition()); 
    } 

    @Override 
    public void onTabUnselected(Tab tab, FragmentTransaction fragmentTransaction) { 



    } 

    @Override 
    public void onTabReselected(Tab tab, FragmentTransaction fragmentTransaction) { 

     viewPager.setCurrentItem(tab.getPosition()); 

    } 
} 

3 단계 :이 예를 들어, 하나 개의 조각이 : 여기

것 코드 :

public class Fragment1 extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     //Can be layout you want it to be. 
     View databaseview = inflater.inflate(R.layout.database, container, false); 

     return databaseview; 

    } 

} 

4 단계 : 마지막 부분은 레이아웃이다 : 이것은 출발점이 될 것입니다.

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"></android.support.v4.view.ViewPager> 

마지막으로, 단편적인 수는 주 활동에 정의 된 문자열 배열과 동일해야합니다. 그렇지 않은 경우 앱이 다운됩니다. 내가 잘 설명

희망 ... :)

나는 이것이 아주 오래된 게시물입니다 알고 있지만,이 대답은 미래의 시청자 사용할 수 있습니다.

관련 문제