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; 
     } 
    } 
}