public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main_screen, container, false);
mPager = (ViewPager)rootView.findViewById(R.id.pager);
mPager.setOffscreenPageLimit(2); // So all 3 pages are loaded at once.
mAdapter = new JournalPagerAdapter(getActivity().getSupportFragmentManager(), this);
mPager.setAdapter(mAdapter);
// Add bar graph to view
mGraphLayout = (LinearLayout) rootView.findViewById(R.id.journalGraph);
updateGraph();
mGraphLayout.addView(mGraphView);
mPainFrag = (PainFragment)mAdapter.getRegisteredFragment(0);
// Null pointer here, but if I put the action in a button listener, it works.
mPainFrag.setScale(mEntry.getPain());
...
public class JournalPagerAdapter extends FragmentPagerAdapter {
SparseArray<Fragment> registeredFragments = new SparseArray<Fragment>();
private View.OnClickListener mOnClickListener;
public JournalPagerAdapter(FragmentManager mgr, View.OnClickListener onClickListener) {
super(mgr);
mOnClickListener = onClickListener;
}
@Override
public Fragment getItem(int pos) {
switch(pos) {
case 0: return PainFragment.newInstance("PainFragment", mOnClickListener);
case 1: return StressFragment.newInstance("StressFragment", mOnClickListener);
case 2: return SleepFragment.newInstance("SleepFragment", mOnClickListener);
default: return PainFragment.newInstance("PainFragment", mOnClickListener);
}
}
@Override
public int getCount() {
return 3;
}
/* Thanks to Streets of Boston (http://stackoverflow.com/questions/8785221/retrieve-a-fragment-from-a-viewpager)
*/
@Override
public Object instantiateItem(ViewGroup container, int position) {
Log.v("rx", "itemInstantiated");
Fragment fragment = (Fragment) super.instantiateItem(container, position);
registeredFragments.put(position, fragment);
return fragment;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
registeredFragments.remove(position);
super.destroyItem(container, position, object);
}
public Fragment getRegisteredFragment(int position) {
return registeredFragments.get(position);
}
我似乎不明白为什么在设置适配器后片断是空的,但是如果我把片断更新代码放在单击事件中,我就没有问题了。
我会尝试在您的视图页中添加一个布局监听器,以便在视图布局发生时得到通知。
创建ViewPager时,调用mpager.getViewTreeObserver().addongLobalayOutListener()
并传递实现ongLobalayOutListener
的内容。
在回调方法中,执行片段更新。确保在回调中调用mpager.getViewTreeObserver().RemoveglobalonLayoutListener(this)
,否则回调将被多次调用。
我有一个有4个选项卡的ViewPager片段,在第4个选项卡中有另一个有3个选项卡的ViewPager,这样,如果每当我切换我的topviewPagerTab(一个有4个选项卡)时,就不会调用sub ViewPager(有3个选项卡)中的setUserVisiblehint片段。
有没有什么好的方法来引用用创建的片段?或者我应该如何从我的活动(准确地说是从选项菜单)中刷新查看页中的片段?
只要不按后退键,一切都很好。一旦用户关闭其中一个子页面列表,就会重新创建以前的列表,但没有以前显示的页面。在父页面列表中浏览其他页面仍然有效。 在GitHub上可以找到一个示例应用程序:
我正在使用开发一个应用程序。 这是我的活动: 我使用的FragmentStatePagerAdapter如下所示: }
问题内容: 我遇到的问题是MainActivity中的onCreate()方法似乎无法启动另一个活动。 我的代码在工作,因此当我单击按钮时,“ AboutActivity”将启动。但是,我要这样做,以便MainActivity中的onCreate()完成后立即启动“ AboutActivity”。 尝试从onCreate()启动“ AboutActivity”时运行该程序时,该程序陷入了空白屏幕。
问题内容: 我目前有一项使用以下活动在活动的onCreate方法中启动的服务: 现在,我需要能够在按下按钮时停止该服务,并在再次按下按钮时再次重新启动它,但是我不确定如何停止该服务并在onCreate方法之外重新启动它。 我想我需要以不同于当前正在执行的方式启动该服务?但是我不确定最好的方法。 我曾在android中查看过stop服务,但是他们启动服务的方法似乎在onCreate中不起作用。 我的