为了账号安全,请及时绑定邮箱和手机立即绑定

仅在片段1加载完成之后,才调用片段2并将数据传递给片段2

仅在片段1加载完成之后,才调用片段2并将数据传递给片段2

温温酱 2021-03-29 12:15:59
我有一个带有两个片段的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 回答

?
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中的数据。


查看完整回答
反对 回复 2021-04-21
?
红颜莎娜

TA贡献1842条经验 获得超12个赞

创建一个您的活动将实现的接口,一旦您获得了经度和纬度值,就可以从MapsFragment中调用该接口。在ListFragment上使用setUserVisibleHint方法。从活动中获得价值。


@Override

public void setUserVisibleHint(boolean isVisibleToUser) {

     ////Use the longitude and latitude values. 

    }


查看完整回答
反对 回复 2021-04-21
  • 2 回答
  • 0 关注
  • 135 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信