2014-11-08 4 views
4

조각 내에서, 스 와이프 할 수있는 조각 세 개가있는 ViewPager를 만들려고합니다. 구조와 임 점점 오류를 이해 임 데 문제가 ..PageViewer 내부에 3 조각을 표시하는 방법

public class ContactFragment extends Fragment { 

FragmentPagerAdapter adapterViewPager; 
private FragmentActivity myContext; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.view_pager, container, false); 

    ViewPager vpPager = (ViewPager) rootView.findViewById(R.id.vpPager); 
    adapterViewPager = new MyPagerAdapter(myContext.getSupportFragmentManager()); 
    vpPager.setAdapter(adapterViewPager); 

    return rootView; 
} 

@Override 
public void onAttach(Activity activity) { 
    myContext=(FragmentActivity) activity; 
    super.onAttach(activity); 
} 

public static class MyPagerAdapter extends FragmentPagerAdapter { 
    private static int NUM_ITEMS = 3; 

    public MyPagerAdapter(FragmentManager fragmentManager) { 
     super(fragmentManager); 
    } 

    // Returns total number of pages 
    @Override 
    public int getCount() { 
     return NUM_ITEMS; 
    } 

    // Returns the fragment to display for that page 
    @Override 
    public Fragment getItem(int position) { 
     switch (position) { 
      case 0: // Fragment # 0 - This will show FirstFragment 
       return FirstFragment.newInstance(0, "Page # 1"); 
      case 1: // Fragment # 0 - This will show FirstFragment different title 
       return FirstFragment.newInstance(1, "Page # 2"); 
      default: 
       return null; 
     } 
    } 

    // Returns the page title for the top indicator 
    @Override 
    public CharSequence getPageTitle(int position) { 
     return "Page " + position; 
    } 

    } 
} 

내 ViewPager 레이아웃 XML은 다음과 같습니다 : 이것은에서 3 개 조각을 내 텍스트 조각 클래스의 인스턴스입니다

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

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

    <android.support.v4.view.PagerTabStrip 
     android:id="@+id/pager_header" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="top" 
     android:paddingBottom="4dp" 
     android:paddingTop="4dp" /> 

    </android.support.v4.view.ViewPager> 
</LinearLayout> 

:

public class FirstFragment extends Fragment { 
// Store instance variables 
private String title; 
private int page; 

// newInstance constructor for creating fragment with arguments 
public static FirstFragment newInstance(int page, String title) { 
    FirstFragment fragmentFirst = new FirstFragment(); 
    Bundle args = new Bundle(); 
    args.putInt("someInt", page); 
    args.putString("someTitle", title); 
    fragmentFirst.setArguments(args); 
    return fragmentFirst; 
} 

// Store instance variables based on arguments passed 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    page = getArguments().getInt("someInt", 0); 
    title = getArguments().getString("someTitle"); 
} 

// Inflate the view for the fragment based on layout XML 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_layout, container, false); 
    TextView tvLabel = (TextView) view.findViewById(R.id.tvLabel); 
    tvLabel.setText(page + " -- " + title); 
    return view; 
} 
} 

앱을 실행하고 조각을로드하면 올바르게 보이지만 페이지 뷰어에서 새 조각으로 슬라이드하려고하면 충돌합니다.

E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: org.example.magnusluca.drawertestapp, PID: 3624 
java.lang.NullPointerException: Attempt to write to field 'android.support.v4.app.FragmentManagerImpl android.support.v4.app.Fragment.mFragmentManager' on a null object reference 

답변

20

사용이

@Override 
public Fragment getItem(int position) { 
    switch (position) { 
     case 0: // Fragment # 0 - This will show FirstFragment 
      return FirstFragment.newInstance(0, "Page # 1"); 
     case 1: // Fragment # 0 - This will show FirstFragment different title 
      return FirstFragment.newInstance(1, "Page # 2"); 
     case 2: 
      return FirstFragment.newInstance(2, "Page # 3"); 
     default: 
      return new Fragment(); 
    } 
} 

당신은 3 스위치 케이스를 가지고 있어야하며 기본 케이스

+0

당연히 반환하지한다! 고마워, 완벽하게 작동합니다! –

+0

감사! 하지만 getItem이 잘못된 위치로 호출되는 이유를 모르겠습니다. 우리는 position 값을 안전하게해야하는 getCount()를 가지고 있기 때문에? – OlivierM

관련 문제