将数据发送到TableLayout Android中的选项卡
我有一个带有TabLayout的片段,看起来像这样: 创建代码的位置:将数据发送到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
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。。?我唯一需要的是以某种方式读取当前显示的选项卡的标题