【问题标题】:Android Pager Issue on Pause暂停时的 Android 寻呼机问题
【发布时间】: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;

    }
}

【问题讨论】:

  • 您使用片段的方式一定有问题。您是否尝试过不使用碎片?
  • 是的,它似乎工作得很好。你不想看到我代码的其他部分吗?
  • 我错过了阅读您的答案,不,我没有尝试过没有碎片,实际上我确信这是不可能的。但无论如何我都需要它们。我添加了一个片段,它们都很相似
  • 我的猜测是您的片段之一在保存实例步骤中存在问题。尝试删除除默认片段以外的所有片段,看看是否仍然出现错误。如果不一次添加一个,看看哪些片段会导致问题。

标签: android pager


【解决方案1】:

我在使用 ActionBarSherlock 兼容性库时偶然发现了同样的问题。解决方法是您的适配器扩展 FragmentStatePagerAdapter 而不是 FragmentPagerAdapter

【讨论】:

  • 工作,谢谢!在一个片段中添加 WebView 后出现问题。
  • 更改为 FragmentStatePagerAdapter 后,它对我有用。谢谢你。
  • 在这上面花了几个小时!非常感谢!
【解决方案2】:

相反,您可以按照我之前在使用 Tab + Fragment + ViewPager + FragmentStatePagerAdapter 时针对与 NPE 相关的问题发布的 here 的工作进行操作

我希望同样的解决方案对你有用

【讨论】:

    【解决方案3】:

    试试 mu answer here 基本上覆盖 onSaveInstanceState,在捆绑包中放置至少一个值。为所有片段做

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-07
      • 2011-06-13
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多