当我实例化这个片段时,我得到一个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 :(得分:0)
我写了我的回答,却没有发现你在ViewPager
的XML中有Fragment
。你是否打算MyFragment
包含其他Fragment
?如果没有,那么这种设计是不正确的。 ViewPager
属于Activity
中使用的布局。如果您确实想在Fragment
中展示其他MyFragment
,请参阅here。
原始答案:
您的问题是,您要在MyFragmentPagerAdapter
本身的onViewCreated
中创建新的Fragment
。寻呼机适配器不应该是Fragment
的内部类。寻呼机适配器与Activity
中的视图寻呼机配合使用,以确定在任何给定时间应显示哪种类型的Fragment
。
编辑:
仅仅因为我看到您对其他答案的评论,getItem
应该返回Fragment
的新实例。这不是潜在的问题。
答案 1 :(得分: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;
}
}
}