Отправка данных на вкладки в TabLayout Android - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть фрагмент с TabLayout, который выглядит следующим образом: enter image description here

Код, в котором он создается:

public class CalendarActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_calendar);

    SimpleDateFormat sdf = new SimpleDateFormat("EEE dd-MM", new Locale("en", "GB"));

    TabLayout tabLayout = findViewById(R.id.tabs);
    final ViewPager viewPager = findViewById(R.id.viewPager);
    tabLayout.addTab(tabLayout.newTab().setText("today"));
    tabLayout.addTab(tabLayout.newTab().setText("tomorrow"));
    tabLayout.addTab(tabLayout.newTab().setText(sdf.format(new Date(((new Date()).getTime() + 2*86400000)))));
    tabLayout.addTab(tabLayout.newTab().setText(sdf.format(new Date(((new Date()).getTime() + 3*86400000)))));
    tabLayout.addTab(tabLayout.newTab().setText(sdf.format(new Date(((new Date()).getTime() + 4*86400000)))));
    tabLayout.addTab(tabLayout.newTab().setText(sdf.format(new Date(((new Date()).getTime() + 5*86400000)))));
    tabLayout.addTab(tabLayout.newTab().setText(sdf.format(new Date(((new Date()).getTime() + 6*86400000)))));
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);

    PageAdapterCalendar adapter = new PageAdapterCalendar (getSupportFragmentManager(), tabLayout.getTabCount());
    viewPager.setAdapter(adapter);
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));

    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            viewPager.setCurrentItem(tab.getPosition());
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {

        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    });
}

Код адаптера:

public class PageAdapterCalendar extends FragmentStatePagerAdapter {
int mNumOfTabs;

public PageAdapterCalendar (FragmentManager fm, int NumOfTabs) {
    super(fm);
    this.mNumOfTabs = NumOfTabs;
}

@Override
public Fragment getItem(int position) {
    Fragment fragment = null;
    switch(position){
        case 0:
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
        case 6:
            fragment = CalendarFragment.newInstance();
            break;
    }
    return fragment;
}

@Override
public int getCount() {
    return mNumOfTabs;
}

}

newinstance () во фрагменте календаря:

    public static Fragment newInstance() {
    CalendarFragment fragment = new CalendarFragment();
    return fragment;
}

Мне нужно, чтобы каждая из моих вкладок работала одинаково и использовала один и тот же макет, но я тольконеобходимо отправить им информацию о дате (так же, как это указано в их заголовке), чтобы они могли получать разные данные из базы данных.Я пробовал пакеты и теги, но они не сработали, как я ожидал - пакеты были добавлены все на каждую вкладку, а теги не загружены в часть onCreate () (я думаю?), Поэтому они были пустыми.

1 Ответ

0 голосов
/ 28 ноября 2018

В вашем методе newInstance попытайтесь передать соответствующую информацию для каждого фрагмента, который вы создаете, в качестве параметров.Вам просто нужно передать, какая небольшая информация необходима для того, чтобы фрагмент знал, откуда взять свои данные в вашей базе данных.Затем оттуда создайте пакет (например, mBundle) и поместите все эти значения в этот пакет и вызовите фрагмент.setArguments (mBundle).Затем в вашем фрагменте метод onCreate проанализирует этот пакет, чтобы получить ваши данные и перейти оттуда.

Вроде бы много шагов, но этот метод гарантирует, что данные сохраняются во всех событиях жизненного цикла

Дляпример см. Рекомендации по созданию нового фрагмента Android

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...