我有一个带有两个片段的MainActivity。片段1是MapsFragment,片段2是ListFragment。当我启动应用程序时,我从Fragment 1获取了用户位置(纬度和经度)。我还想做的是将数据传递给Fragment 2,然后再开始加载,然后在Fragment 2中调用onCreateView,这样我就可以了我从片段1接收到的含有经纬度的东西通常,我会使用意图将数据从一个片段发送到另一个片段,然后通过活动进行发送,但是我的问题要更具体一些,因为在我有时间传递数据之前,片段2紧接在片段1之后加载。我的主要活动:tabLayout = findViewById(R.id.sliding_tabs);tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.tab_one)));tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.tab_two)));tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);tabLayout.setTabMode(TabLayout.MODE_FIXED);viewPager = findViewById(R.id.viewpager);adapter = new PagerAdapter(getSupportFragmentManager(), tabLayout.getTabCount());viewPager.setAdapter(adapter);viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));viewPager.setOffscreenPageLimit(2);tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { viewPager.setCurrentItem(tab.getPosition()); // Step 2 - undo expand for collapsible toolbar appBarLayout.setExpanded(true); @Override public void onTabUnselected(TabLayout.Tab tab) { } @Override public void onTabReselected(TabLayout.Tab tab) { } });}我的PagerAdapter:public class PagerAdapter extends FragmentStatePagerAdapter { private int mNumOfTabs; public PagerAdapter(FragmentManager fm, int NumOfTabs) { super(fm); this.mNumOfTabs = NumOfTabs; } @Override public Fragment getItem(int position) { switch (position) { case 0: return new MapsFragment(); case 1: return new ListFragment(); case 2: return null; } } @Override public int getCount() { return mNumOfTabs; }}
2 回答
![?](http://img1.sycdn.imooc.com/54584ed2000152a202200220-100-100.jpg)
MMMHUHU
TA贡献1834条经验 获得超8个赞
最好的方法是在Activity中获取两个片段都使用的通用数据,然后添加片段。
无论如何,对于您的问题,我脑海中有两种解决方案。
1-仅当用户可以看到片段2时,才将数据加载到片段2中。为此,您可以在片段2中覆盖此方法。
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
//load data here
}
}
2-最初用一些伪数据填充片段2(或保留为空),并在片段1通过从片段1向片段2发送广播事件完成数据加载时更新片段2中的数据。
![?](http://img1.sycdn.imooc.com/54584dd900014f6c02200220-100-100.jpg)
红颜莎娜
TA贡献1842条经验 获得超12个赞
创建一个您的活动将实现的接口,一旦您获得了经度和纬度值,就可以从MapsFragment中调用该接口。在ListFragment上使用setUserVisibleHint方法。从活动中获得价值。
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
////Use the longitude and latitude values.
}
添加回答
举报
0/150
提交
取消