从ViewPager初始片段中未显示的操作项目

9 浏览
0 Comments

从ViewPager初始片段中未显示的操作项目

在我正在开发的应用程序中,我使用ViewPager和片段,每个片段独立构建自己的菜单,与ViewPager中的所有其他片段无关。

问题是,有时由ViewPager默认初始化的片段(即在其初始状态下)没有将其项填充到操作项菜单中。更糟糕的是,这个问题只是偶尔发生。如果我通过ViewPager滑动足够多次,强制片段重新初始化自己,当我滑动回来时,菜单就会正确填充。

活动代码:

package net.solarnz.apps.fragmentsample;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.os.Bundle;
import android.support.v13.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
public class FragmentSampleActivity extends Activity {
    private ViewPagerAdapter mViewPagerAdapter;
    private ViewPager mViewPager;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        if (mViewPagerAdapter == null) {
            mViewPagerAdapter = new ViewPagerAdapter(getFragmentManager());
        }
        mViewPager = (ViewPager) findViewById(R.id.log_pager);
        mViewPager.setAdapter(mViewPagerAdapter);
        mViewPager.setCurrentItem(0);
    }
    private class ViewPagerAdapter extends FragmentStatePagerAdapter {
        public ViewPagerAdapter(FragmentManager fm) {
            super(fm);
        }
        @Override
        public int getCount() {
            return 8;
        }
        @Override
        public Fragment getItem(int position) {
            Fragment f = Fragment1.newInstance(position);
            // f.setRetainInstance(true);
            f.setHasOptionsMenu(true);
            return f;
        }
    }
}

片段代码:

package net.solarnz.apps.fragmentsample;
import android.app.Fragment;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
public class Fragment1 extends Fragment {
    int mNum;
    static Fragment newInstance(int num) {
        Fragment1 f = new Fragment1();
        // Supply num input as an argument.
        Bundle args = new Bundle();
        args.putInt("num", num);
        f.setArguments(args);
        return f;
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
        mNum = getArguments() != null ? getArguments().getInt("num") : 0;
    }
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.menu_list, menu);
    }
}

布局:



    

菜单:



    

填充操作菜单的截图:

[图片链接](https://i.stack.imgur.com/QFMDd.png)

未填充操作菜单的截图:

[图片链接](https://i.stack.imgur.com/sH5Pp.png)

0