Java 片段中的getActivity()返回null。父活动中的FragmentPagerAdapter存在问题?

Java 片段中的getActivity()返回null。父活动中的FragmentPagerAdapter存在问题?,java,android,android-fragments,Java,Android,Android Fragments,我有一个活动,它承载一个带有两个片段的viewPager。我遇到了一个问题,在我的片段中对getActivity()的调用在活动被销毁然后重新创建后返回null(我正在更改系统设置,而我的应用程序在后台暂停,这会导致活动被销毁然后重新创建)。下面是我的家长活动的样子 public class MainActivity extends AppCompatActivity { private CalculatorPagerAdapter mSectionsPagerAdapter; /** *

我有一个活动,它承载一个带有两个片段的viewPager。我遇到了一个问题,在我的片段中对getActivity()的调用在活动被销毁然后重新创建后返回null(我正在更改系统设置,而我的应用程序在后台暂停,这会导致活动被销毁然后重新创建)。下面是我的家长活动的样子

public class MainActivity extends AppCompatActivity {

private CalculatorPagerAdapter mSectionsPagerAdapter;

/**
 * The {@link ViewPager} that will host the section contents.
 */
private ViewPager mViewPager;
private final int HISTORY_PAGE_INDEX = 1;
private final int CALCULATOR_PAGE_INDEX = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    mSectionsPagerAdapter = new CalculatorPagerAdapter(getSupportFragmentManager());

    // Set up the ViewPager with the sections adapter.
    mViewPager = (ViewPager) findViewById(R.id.container);
    mViewPager.setAdapter(mSectionsPagerAdapter);

    mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        /**
         * Refreshes the listView in the history fragment whenever the user moves to it.
         * @param position
         */
        @Override
        public void onPageSelected(int position) {
            CalculatorPagerAdapter fragmentPagerAdapter = (CalculatorPagerAdapter) mViewPager.getAdapter();
            if(position == HISTORY_PAGE_INDEX){
                ((HistoryFragment) fragmentPagerAdapter.getItem(HISTORY_PAGE_INDEX)).refreshHistory();
            }else if(position == CALCULATOR_PAGE_INDEX){
                //((CalculatorFragment) fragmentPagerAdapter.getItem(CALCULATOR_PAGE_INDEX)).refreshCalculator();
            }
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(mViewPager);

}

@Override
public void onDestroy(){
    super.onDestroy();
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        Intent intent = new Intent(this, SettingsActivity.class);
        startActivity(intent);
        return true;
    }

    return super.onOptionsItemSelected(item);
}


/**
 * A {@link FragmentPagerAdapter} that returns a fragment corresponding to
 * one of the sections/tabs/pages.
 */
public class CalculatorPagerAdapter extends FragmentPagerAdapter {

    HistoryFragment historyFragment;
    CalculatorFragment calculatorFragment;

    public CalculatorPagerAdapter(FragmentManager fm) {
        super(fm);
        historyFragment = new HistoryFragment();
        calculatorFragment = new CalculatorFragment();
    }


    @Override
    public Fragment getItem(int position) {
        if (position ==0) return calculatorFragment;
        else return historyFragment;
    }

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

    @Override
    public CharSequence getPageTitle(int position) {
        switch (position) {
            case 0:
                return "Calculator";
            case 1:
                return "History";
        }
        return null;
    }
}
}

我注意到活动和片段的生命周期调用按以下顺序进行

初始创建时(正常)

  • activity.onCreate
  • 片段
  • fragment.onCreateView
  • 当我更改触发活动销毁和重新创建的系统设置时(此处发布)

  • 活动
  • 碎片存储
  • fragment.onAttach(不存在父活动?)
  • activity.onCreate
  • fragment.onCreateView
  • 在此之后,从片段retuns null获取活动。我是否在我的家长活动中错误地处理了我的片段

    这是由于尝试使用null getActivity()而导致的崩溃的日志。这是由连接到我的viewpager的OnPageChangeListener中的onPageSelected方法触发的

    11-26 12:56:21.739 31769-31769/com.example.keegan.securetipping I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@d035425 time:1218086194
    11-26 12:56:24.864 31769-31769/com.example.keegan.securetipping E/InputEventReceiver: Exception dispatching input event.
    11-26 12:56:24.864 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.support.v4.app.FragmentActivity.getApplicationContext()' on a null object reference
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at com.example.keegan.securetipping.HistoryFragment.refreshHistory(HistoryFragment.java:88)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at com.example.keegan.securetipping.MainActivity$1.onPageSelected(MainActivity.java:54)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.support.v4.view.ViewPager.dispatchOnPageSelected(ViewPager.java:1794)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.support.v4.view.ViewPager.scrollToItem(ViewPager.java:569)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:553)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.support.v4.view.ViewPager.onTouchEvent(ViewPager.java:2102)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.view.View.dispatchTouchEvent(View.java:8547)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2400)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2093)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2372)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1722)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.app.Activity.dispatchTouchEvent(Activity.java:2742)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.support.v7.internal.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.support.v7.internal.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2333)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.view.View.dispatchPointerEvent(View.java:8742)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4136)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4002)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3557)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3610)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3576)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3693)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3584)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3750)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3557)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3610)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3576)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3584)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3557)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5823)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5797)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5768)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5913)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.os.MessageQueue.nativePollOnce(Native Method)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.os.MessageQueue.next(MessageQueue.java:143)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.os.Looper.loop(Looper.java:195)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at android.app.ActivityThread.main(ActivityThread.java:5373)
    11-26 12:56:24.868 31769-31769/com.example.keegan.securetipping E/MessageQueue-JNI:     at java.lang.reflect.Method.invoke(Native Method)
    11-26 12:56:24.869 31769-31769/com.example.keegan.securetipping D/AndroidRuntime: Shutting down VM
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime: FATAL EXCEPTION: main
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime: Process: com.example.keegan.securetipping, PID: 31769
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.support.v4.app.FragmentActivity.getApplicationContext()' on a null object reference
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at com.example.keegan.securetipping.HistoryFragment.refreshHistory(HistoryFragment.java:88)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at com.example.keegan.securetipping.MainActivity$1.onPageSelected(MainActivity.java:54)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.support.v4.view.ViewPager.dispatchOnPageSelected(ViewPager.java:1794)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.support.v4.view.ViewPager.scrollToItem(ViewPager.java:569)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:553)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.support.v4.view.ViewPager.onTouchEvent(ViewPager.java:2102)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.view.View.dispatchTouchEvent(View.java:8547)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2400)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2093)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2372)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1722)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.app.Activity.dispatchTouchEvent(Activity.java:2742)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.support.v7.internal.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.support.v7.internal.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2333)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.view.View.dispatchPointerEvent(View.java:8742)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4136)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4002)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3557)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3610)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3576)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3693)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3584)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3750)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3557)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3610)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3576)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3584)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3557)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5823)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5797)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5768)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5913)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.os.MessageQueue.nativePollOnce(Native Method)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.os.MessageQueue.next(MessageQueue.java:143)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:195)
    11-26 12:56:24.874 31769-31769/com.example.keegan.securetipping E/AndroidRuntime:   at android.app.ActivityThread.main(Act
    
    这是来自引发异常的HistoryFragment类的代码位。我只是调用getApplicationContext以获取此示例的错误。通常,该错误会在我的FetchHistoryEntries异步任务中抛出

    /**
     * Refreshes the listView in the history fragment with data from the history database.
     */
    public void refreshHistory(){
    
        getActivity().getApplicationContext();
        new FetchHistoryEntries(getActivity()).execute();
    }
    
    我的历史片段只包含一个列表视图。这是它的XML

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    
    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/history_listview"/>
    
    
    

    当活动被销毁时,您将丢失正在使用的上下文,这就是应用程序引发异常的原因,因为您在销毁引发空指针异常的活动后调用了
    getActivity()
    ,为避免此情况,您应将
    刷新历史记录更改为以下内容:

    public void refreshHistory(){
        if (isAdded()) {
            getActivity().getApplicationContext();
            new FetchHistoryEntries(getActivity()).execute();
        }
    }
    
    isAdded()
    当片段附加到活动且活动不为null时,返回true

    你也应该考虑在你的活动被破坏时取消你的异步任务,你可以这样做:首先定义一个与你的异步任务相同类型的全局变量,比如这个代码>代码>第二,像这样执行全局任务

    task = new FetchHistoryEntries(getActivity()).execute;
    
    最后,在onDestroy重写方法中,按如下方式取消任务:

    if (task != null) {
        task.cancel(true);
    }
    

    希望这对你有帮助,祝你好运

    我实际上通过切换到FragmentStatePagerAdapter而不仅仅是FragmentPagerAdapter解决了这个问题。状态寻呼机适配器使保存和恢复碎片状态变得更容易,这正是我的问题所在。这个要点有一个很好的例子

    请在第88行的历史片段中发布您的日志,说明NPE。请也发布历史片段和布局。添加相关信息。谢谢也请发布您的信息不足以发现问题,使用这段代码很难预测编译器的流程;删除此行后重试可能您的意思是
    (任务=新的FetchHistoryEntries(getActivity())。执行()?我可以避免崩溃,但问题是如果getActivity()为null,则我无法执行需要执行的操作以使片段函数达到预期效果。从fragmentPagerAdapter返回的片段没有附加到父活动,我不知道为什么。