У меня есть MainActivity с двумя фрагментами. Фрагмент 1 – это MapsFragment, а фрагмент 2 – ListFragment. Когда я запускаю приложение, я получаю местоположение пользователя (широта и долгота) из фрагмента 1. Что я также хочу сделать, так это передать эти данные во фрагмент 2, до того, как он начнет загружаться, прежде чем onCreateView будет вызван во фрагменте 2 strong>, поэтому я могу делать что-то с широтой и долготой, которые я получаю из фрагмента 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) {
}
});
}
Мой пейджерадаптер:
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;
}
}
Вот как я передаю широту и долготу в MainActivity после того, как получу их в свой MapsFragment:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
...
Intent intent = new Intent(getActivity().getBaseContext(),
MainActivity.class);
intent.putExtra("latitude", latitude);
intent.putExtra("longitude", longitude);
getActivity().startActivity(intent);
...
}
Решение.
Оно основано на ответах и комментариях. В моем фрагменте списка я вызывал метод только в том случае, если широта и долгота не пусты. И после того, как я получаю lat и lon, он вызывается снова, я использовал интерфейс и прослушиватель.
Лучшим решением было бы переписать мой код и написать его правильно, как было предложено в комментариях.