1

當我實例化這個片段時,我得到一個stackoverflow錯誤。我試圖使用我的主要活動類中定義的導航抽屜來選擇此片段。Android片段stackoverflow

public class MyFragment extends Fragment { 

    public static MyFragment newInstance() { 
     return new MyFragment(); 
    } 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.page_meet, container, false); 
    } 

    public void onViewCreated(View view, Bundle savedInstanceState) { 
     ViewPager mViewPager = (ViewPager) view.findViewById(R.id.pager); 
     MyFragmentPagerAdapter mViewPagerAdapter = new MyFragmentPagerAdapter(getChildFragmentManager()); 
     mViewPager.setAdapter(mViewPagerAdapter); 
    } 

    public class MyFragmentPagerAdapter extends FragmentPagerAdapter { 

     public MyFragmentPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      return newInstance(); 
     } 

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

下面是XML文件page_meet.xml:

<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"> 

    <LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" 
    android:background="#00FF00" > 


</LinearLayout> 

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

logcat的不是非常豐富:

10-07 03:19:27.910: E/AndroidRuntime(27875): FATAL EXCEPTION: main 
10-07 03:19:27.910: E/AndroidRuntime(27875): java.lang.StackOverflowError 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11890) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirection(View.java:11892) 
10-07 03:19:27.910: E/AndroidRuntime(27875): at android.view.View.canResolveLayoutDirec 

回答

0

我寫我的回答沒有意識到你有一個ViewPager XML中的爲Fragment。您是否打算讓MyFragment包含其他Fragment?如果不是,那麼這種設計是不正確的。 ViewPager屬於Activity中使用的佈局。如果您確實想在MyFragment內顯示其他Fragment,請參閱here

原始回答: 你的問題是你正在Fragment本身的onViewCreated中創建一個新的MyFragmentPagerAdapter。尋呼機適配器不應該是Fragment的內部類。尋呼機適配器與Activity中的查看尋呼機一起工作,以確定在任何給定時間應該顯示哪種類型的Fragment

編輯: 僅僅因爲我看到您對其他答案的評論,getItem應返回Fragment的新實例。這不是根本問題。

0

謝謝你的回答。我確實希望MyFragment包含一個填充了其他兩個片段的ViewPager。堆棧溢出錯誤是因爲我遞歸地調用了MyFragment.newInstance()而沒有意識到它。我嘗試用它自己的片段類填充視圖分頁器。我通過嵌套另一個片段類並在getItem()內調用newInstance()方法來解決這個問題。

完成工作代碼:

public class MyFragment extends Fragment { 

    public static final MyFragment newInstance() { 
     return new MyFragment(); 
    } 

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

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.page_meet, container, false); 
    } 

    @Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
     ViewPager mViewPager = (ViewPager) view.findViewById(R.id.pager); 
     MyFragmentPagerAdapter mViewPagerAdapter = new MyFragmentPagerAdapter(getChildFragmentManager()); 
     mViewPager.setAdapter(mViewPagerAdapter); 
    } 

    public class MyFragmentPagerAdapter extends FragmentPagerAdapter { 

     public MyFragmentPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      return MeetFragment.newInstance(position); 
     } 

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

    public static class MeetFragment extends Fragment { 
     public static final String ARG_POSITION = "position"; 

     public static final MeetFragment newInstance(int position) { 
      MeetFragment fragment = new MeetFragment(); 
      Bundle args = new Bundle(); 
      args.putInt(ARG_POSITION, position); 
      fragment.setArguments(args); 
      return fragment; 
     } 

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

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
      View rootView; 
      int position = getArguments().getInt(ARG_POSITION); 
      switch(position) { 
      case 0: 
       rootView = inflater.inflate(R.layout.page_meet_0, container, false); 
       break; 
      case 1: 
       rootView = inflater.inflate(R.layout.page_meet_1, container, false); 
       break; 
      default: 
       rootView = null; 
       break; 
      } 
      return rootView; 
     } 
    } 
}