从ViewPager初始片段中未显示的操作项目
从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)