1

デバイスがスタンバイ状態になった後、呼び出す と、すべての変数が に設定された初期化されていないフラグメントを含む がgetSupportFragmentManager()取得されます。FragmentManagernull

ここにいくつかのコードがあります:

this.mAdapter = new MyAdapter(getSupportFragmentManager());

this.mPager = (ViewPager) findViewById(R.id.pager);
this.mPager.setAdapter(mAdapter);

TabPageIndicator titleIndicator = (TabPageIndicator) findViewById(R.id.titles);
titleIndicator.setViewPager(mPager);
titleIndicator.setOnPageChangeListener(new OnPageChangeListener()
{
    @Override
    public void onPageSelected(int position)
    {
        mAdapter.getItem(position).onFocus();
    }

    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2)
    {
    }

    @Override
    public void onPageScrollStateChanged(int arg0)
    {
    }
});

これは MyAdapter クラスです:

public static class MyAdapter extends FragmentStatePagerAdapter
{
    ArrayList<ExtendedFragment> tabs = new ArrayList<ExtendedFragment>();
    String[] titles = new String[] { "FRAG1", "FRAG2", "FRAG3", "FRAG4", "FRAG5", "FRAG6"};

    public MyAdapter(FragmentManager fm)
    {
        super(fm);

        tabs.add(new frag1());
        tabs.add(new frag2());
        tabs.add(new frag3());
        tabs.add(new frag4());
        tabs.add(new frag5());
        tabs.add(new frag6());
    }

    @Override
    public int getCount()
    {
        return tabs.size();
    }

    @Override
    public ExtendedFragment getItem(int position)
    {
        return tabs.get(position);
    }

    @Override
    public CharSequence getPageTitle(int position)
    {
        return titles[position];
    }
}

ExtendedFragmentメソッドを実装しonFocus()、タブがフォーカスを取得したときにいくつかのアクションを実行する必要があるため、各フラグメントはそれをオーバーライドします。デバイスをスタンバイから再開してonFocus()解雇されたときに、View使用getView()を取得しようとすると、 が取得されますnull

ビューが null になるのはなぜですか?

4

1 に答える 1

3

onSaveInstanceState メソッドをオーバーライドしてみてください。

    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            if (savedInstanceState != null) {
                mContentFragment = getSupportFragmentManager().getFragment(
                        savedInstanceState, "mContent");
            }
            if (mContentFragment == null) {
                mContentFragment = new YourFragment();
            }
    }

    public void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            getSupportFragmentManager().putFragment(outState, "mContent",
            mContentFragment);
    }
于 2012-11-14T11:27:17.643 に答える