检索动态创建的片段

时间:2016-07-01 16:37:10

标签: android android-fragments fragment

我的代码在选项卡式视图中动态创建片段,我想在调用OnCreate活动时访问其中一个片段。
我知道有两种检索现有片段的方法,一种是ID,另一种是Tag 在创建片段以便稍后检索时,如何标记片段?

public class MainActivity extends AppCompatActivity {

    private Toolbar toolbar;
    private TabLayout tabLayout;
    private ViewPager viewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        viewPager = (ViewPager) findViewById(R.id.viewpager);

        setupViewPager(viewPager);

        tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);

        if(extras !=null) {
            // ***Get Fragment Here***
        }
    }

    private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(new TabFragment1(), "ONE");
        adapter.addFragment(new TabFragment2(), "TWO");
        viewPager.setAdapter(adapter);
    }

    class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);

        }

        @Override
        public int getCount() {
            return mFragmentList.size();
        }

        public void addFragment(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }
    }

2 个答案:

答案 0 :(得分:0)

FragmentPagerAdapter已经为您缓存了碎片。为每个片段分配一个标签,然后FragmentPagerAdapter尝试调用

findFragmentByTag 

如果findFragmentByTag的结果为null,则只调用getItem。所以你不必自己缓存片段。

此外,您可以使用findFragmentByTag()方法在FragmentPagerAdapter中引用Fragment。标签的名称以这种方式生成:

private static String makeFragmentName(int viewId, int index)
{
     return "android:switcher:" + viewId + ":" + index;
}

其中viewId是ViewPager的id

答案 1 :(得分:0)

AmanSinghal的回答是有效的,我有另一种方法。您可以使用返回当前显示的片段的方法创建适配器。

几年前我在这里实现了它:PublicisedFragmentPagerAdapter 查看getCurrentPrimaryItem()方法