主要活动变量变为空

时间:2017-02-13 12:05:17

标签: android

在我的主要活动中,我有:

private DataManager mDataManager;

在同一个活动中,我在生命周期后管理这个变量。这些是相关的方法:

public class MainActivity extends AppCompatActivity {

@Override
public void onStart() {
    super.onStart();
    mDataManager = new DataManager(this);
}

@Override
public void onResume() {
    super.onResume();
    mDataManager.connect(getIpAddress());
}

@Override
public void onPause() {
    super.onPause();
    mDataManager.disconnect();
}

@Override
public void onStop() {
    super.onStop();
    mDataManager = null;
}

@Override
public DataManager getDataManager() {
    return mDataManager;
}

@Override
public void updateFragments() {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            if (mLoading.isShowing())
                mLoading.dismiss();
            List<Fragment> allFragments = getSupportFragmentManager().getFragments();
            if (allFragments == null || allFragments.isEmpty())
                return;
            for (Fragment fragment : allFragments)
                if (fragment.isVisible())
                    ((UpdatableFragment) fragment).updateView();
        }
    });
}

我有一些片段使用getDataManager()来自我更新数据,但有时,通常当我暂时不使用该应用程序时,我得到nullpointerexception因为getDataManager()返回null 。根据活动生命周期,对象永远不应该是null或者我错过了什么?

编辑:ViewPager的初始化

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);
    Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
    setSupportActionBar(myToolbar);
    MainAdapter adapter = new MainAdapter(getSupportFragmentManager());
    ViewPager viewPager = (ViewPager) findViewById(R.id.my_pager);
    viewPager.setAdapter(adapter);
}

public class MainAdapter extends FragmentPagerAdapter {

    MainAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return FragmentX.newInstance();
            case 1:
                return FragmentY.newInstance();
            case 2:
                return FragmentZ.newInstance();
            case 3:
                return FragmentU.newInstance();
        }
        return null;
    }

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

0 个答案:

没有答案
相关问题