【发布时间】:2012-03-06 17:10:48
【问题描述】:
我正在使用带有兼容性库的 Pager 构建一个应用程序。 我的应用程序在我尝试暂停时强制关闭(例如,当我回到桌面时)。
我从来没有遇到过这种类型的错误,因此我不知道如何解决它。
我会向你展示我的代码,而我很确定你不必看它:
public class *** extends FragmentActivity {
/** Called when the activity is first created. */
static final int NUM_ITEMS = 5;
static final int NUM_ACTUALITE = 0;
static final int NUM_SELECTION = 1;
static final int NUM_MULTIMEDIA = 2;
static final int NUM_FESTIVALIER = 3;
static final int NUM_***E = 4;
MyAdapter mAdapter;
ViewPager mPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pager_layout);
mAdapter = new MyAdapter(getSupportFragmentManager());
mPager = (ViewPager) findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
}
public static class MyAdapter extends FragmentPagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return NUM_ITEMS;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case NUM_ACTUALITE:
return ActuFragment.newInstance();
case NUM_SELECTION:
return SelectionFragment.newInstance();
case NUM_MULTIMEDIA:
return MultimediaFragment.newInstance();
case NUM_FESTIVALIER:
return FestivalierFragment.newInstance();
case NUM_***E:
return ***eFragment.newInstance();
default:
return ActuFragment.newInstance();
}
}
}
还有我的 logCat:
02-15 11:48:03.902: E/AndroidRuntime(11601): FATAL EXCEPTION: main
02-15 11:48:03.902: E/AndroidRuntime(11601): java.lang.RuntimeException: Unable to pause activity {com.**.**/com.**.**.***Activity}: java.lang.NullPointerException
02-15 11:48:03.902: E/AndroidRuntime(11601): at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2354)
02-15 11:48:03.902: E/AndroidRuntime(11601): at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2311)
02-15 11:48:03.902: E/AndroidRuntime(11601): at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:2291)
02-15 11:48:03.902: E/AndroidRuntime(11601): at android.app.ActivityThread.access$1700(ActivityThread.java:117)
02-15 11:48:03.902: E/AndroidRuntime(11601): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:938)
02-15 11:48:03.902: E/AndroidRuntime(11601): at android.os.Handler.dispatchMessage(Handler.java:99)
02-15 11:48:03.902: E/AndroidRuntime(11601): at android.os.Looper.loop(Looper.java:130)
02-15 11:48:03.902: E/AndroidRuntime(11601): at android.app.ActivityThread.main(ActivityThread.java:3683)
02-15 11:48:03.902: E/AndroidRuntime(11601): at java.lang.reflect.Method.invokeNative(Native Method)
02-15 11:48:03.902: E/AndroidRuntime(11601): at java.lang.reflect.Method.invoke(Method.java:507)
02-15 11:48:03.902: E/AndroidRuntime(11601): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
02-15 11:48:03.902: E/AndroidRuntime(11601): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
02-15 11:48:03.902: E/AndroidRuntime(11601): at dalvik.system.NativeStart.main(Native Method)
02-15 11:48:03.902: E/AndroidRuntime(11601): Caused by: java.lang.NullPointerException
02-15 11:48:03.902: E/AndroidRuntime(11601): at android.support.v4.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1576)
02-15 11:48:03.902: E/AndroidRuntime(11601): at android.support.v4.app.FragmentManagerImpl.saveAllState(FragmentManager.java:1617)
02-15 11:48:03.902: E/AndroidRuntime(11601): at android.support.v4.app.FragmentActivity.onSaveInstanceState(FragmentActivity.java:481)
02-15 11:48:03.902: E/AndroidRuntime(11601): at android.app.Activity.performSaveInstanceState(Activity.java:1037)
02-15 11:48:03.902: E/AndroidRuntime(11601): at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1181)
02-15 11:48:03.902: E/AndroidRuntime(11601): at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2336)
02-15 11:48:03.902: E/AndroidRuntime(11601): ... 12 more
地雷碎片:
public class ActuFragment extends Fragment {
public static ActuFragment newInstance() {
ActuFragment f = new ActuFragment();
return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View mainView = inflater.inflate(R.layout.actualites_layout,
container, false);
return mainView;
}
}
【问题讨论】:
-
您使用片段的方式一定有问题。您是否尝试过不使用碎片?
-
是的,它似乎工作得很好。你不想看到我代码的其他部分吗?
-
我错过了阅读您的答案,不,我没有尝试过没有碎片,实际上我确信这是不可能的。但无论如何我都需要它们。我添加了一个片段,它们都很相似
-
我的猜测是您的片段之一在保存实例步骤中存在问题。尝试删除除默认片段以外的所有片段,看看是否仍然出现错误。如果不一次添加一个,看看哪些片段会导致问题。