猿问

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

我有一个带有两个片段的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;

    }

}



温温酱
浏览 136回答 2
2回答

MMMHUHU

最好的方法是在Activity中获取两个片段都使用的通用数据,然后添加片段。无论如何,对于您的问题,我脑海中有两种解决方案。1-仅当用户可以看到片段2时,才将数据加载到片段2中。为此,您可以在片段2中覆盖此方法。@Overridepublic void setUserVisibleHint(boolean isVisibleToUser) {    super.setUserVisibleHint(isVisibleToUser);    if (isVisibleToUser) {         //load data here    }  }2-最初用一些伪数据填充片段2(或保留为空),并在片段1通过从片段1向片段2发送广播事件完成数据加载时更新片段2中的数据。

红颜莎娜

创建一个您的活动将实现的接口,一旦您获得了经度和纬度值,就可以从MapsFragment中调用该接口。在ListFragment上使用setUserVisibleHint方法。从活动中获得价值。@Overridepublic void setUserVisibleHint(boolean isVisibleToUser) {     ////Use the longitude and latitude values.     }
随时随地看视频慕课网APP

相关分类

Java
我要回答