将数据发送到TableLayout Android中的选项卡

将数据发送到TableLayout Android中的选项卡,android,android-fragments,bundle,android-adapter,android-tablayout,Android,Android Fragments,Bundle,Android Adapter,Android Tablayout,我有一个带有TabLayout的片段,看起来像这样: 创建代码的位置: public class CalendarActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.my_calendar); Simpl

我有一个带有TabLayout的片段,看起来像这样:

创建代码的位置:

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;
}

我需要我的每个标签行为相同,使用相同的布局,但我只需要向他们发送日期信息(与标题中的信息相同),这样他们就可以从数据库中获得不同的数据。我尝试了bundle和tag,但它没有像我预期的那样工作-bundle被全部添加到每个选项卡,而tag没有加载到onCreate()部分(我想?),所以它们是空的。

在newInstance方法中,尝试将创建的每个片段的相关信息作为参数传递进来。您只需要传入所需的少量信息,以便片段知道从数据库中的何处获取数据。然后从那里创建一个bundle(例如mBundle),并将所有这些值放入该bundle中,然后调用fragment.setArguments(mBundle)。然后在fragmentoncreate方法中解析该包以获取数据并从中开始

这似乎需要很多步骤,但此方法确保数据在所有生命周期事件中保持不变


例如,请参见

谢谢,但问题是,即使是基于选项卡标记这些数据,我仍然不知道如何在片段中获得正确的值,例如,如果我的包将是(“1”,“12/12”)-1以指示它属于第一个选项卡,然后在选项卡内,我无法检查当前运行的是哪一个。@Gariable如果您想查看当前可见的片段,您可能需要查看覆盖setuservisiblehint:我认为这仍然不是我所需要的,因为我正在创建同一片段的7个实例,所以,若我要添加一个代码来检查给定的片段是否对用户可见,它将始终返回true。。?我唯一需要的是以某种方式读取当前显示的选项卡的标题