我的代码在选项卡式视图中动态创建片段,我想在调用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);
}
}
答案 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()
方法