如何在片段中使用 pager.setCurrentItem()?
Posted
技术标签:
【中文标题】如何在片段中使用 pager.setCurrentItem()?【英文标题】:How can I use pager.setCurrentItem() inside a fragment? 【发布时间】:2015-07-22 11:45:27 【问题描述】:我创建了许多片段, Fragment1 , Fragment2.. , Fragment50 在第一个带有侦听器方法的片段内,我想调用 Fragment40。但我没管。这些行在侦听器内部运行
pager.setCurrentItem(0);
pager.setCurrentItem(pager.getCurrentItem() + 1);
pager.setCurrentItem(pager.getCurrentItem() - 1);
But pager.setCurrentItem(40); not run. Gives errors. Any help please?
//First Fragment01
//I want to call Fragment40
public class Frag_2 extends Fragment implements
OnClickListener, AdapterView.OnItemSelectedListener
//....................................................
public void onActivityCreated(Bundle savedInstanceState) super.onActivityCreated(savedInstanceState);
final ViewPager pager = (ViewPager) getActivity().findViewById(R.id.pager);
View txtdersHakkinda1 = (View) getActivity().findViewById(R.id.txtDersHakkinda1);
txtdersHakkinda1.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
pager.setCurrentItem(pager.getCurrentItem()+40); // not run
// pager.setCurrentItem(0); //runs
// pager.setCurrentItem(pager.getCurrentItem() + 1);
// pager.setCurrentItem(pager.getCurrentItem() - 1);
);
//......................................................................
/////////////////////// If many fragments --> FragmentStatePagerAdapter /////////////
public class MyPagerAdapter extends FragmentStatePagerAdapter
private List<Fragment> fragments;
public MyPagerAdapter(FragmentManager fm)
super(fm);
this.fragments = new ArrayList<Fragment>();
fragments.add(new Frag_1<Object>());
fragments.add(new Frag_2());
fragments.add(new Frag_3());
fragments.add(new Frag_4());
.....................
fragments.add(new Frag_50());
@Override
public Fragment getItem(int position)
return fragments.get(position);
@Override
public int getCount()
return fragments.size();
【问题讨论】:
这个片段的post code,因为没有它没有人可以帮助你 我是新兵,正在尝试添加代码 照常复制,然后选中并按 ctrl + k 活动回调:developer.android.com/training/basics/fragments/… 【参考方案1】:将此方法添加到您的适配器:
@Override
public Object instantiateItem(ViewGroup container, int position)
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);
你不能得到这样的项目:adapater.getRegisteredFragment(viewPager.getCurrentItem())
【讨论】:
我将您的方法和 SparseArray以上是关于如何在片段中使用 pager.setCurrentItem()?的主要内容,如果未能解决你的问题,请参考以下文章