如何在片段中使用 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 registeredFragments = new SparseArray() 添加到了我的适配器中。现在我必须怎么做才能用 clickview 调用 Fragment40.class? 你不需要数组,你应该调用 adapater.getRegisteredFragment(pager.getCurrentItem + 40) 而不是 pager.getCurrentItem()+40 然后你可以使用 40 个片段 pageAdapter.getRegisteredFragment(pager.getCurrentItem()+2);给出 nullpoint .. 在我定义的 MainActivity 中。 // 实例化一个 ViewPager 和一个 PagerAdapter。 fragmentManager = getSupportFragmentManager(); pageAdapter = new MyPagerAdapter(fragmentManager);最终 ViewPager pager = (ViewPager) findViewById(R.id.pager); pager.setAdapter(pageAdapter); pager.setOffscreenPageLimit(4); 也许你应该发布你的新代码,因为现在很难理解

以上是关于如何在片段中使用 pager.setCurrentItem()?的主要内容,如果未能解决你的问题,请参考以下文章

如何在片段中使用按钮[关闭]

如何在 kotlin 中使用片段

如何在片段中使用与活动中不同的菜单?

如何在 ViewBinding 中使用片段?

如何使用 tabLayout 在 ViewPager 中显示片段?

如何在片段中使用Google地图