我需要帮助重新加载属于ViewPager的Fragment。这是我目前的设置: ReportActivity扩展了FragmentActivity并使用ViewPager托管4个选项卡 选项卡1到4.每个选项卡都是一个具有单独布局的片段。
ViewPager使用TabsPagerAdapter在标签之间切换,这可以按预期工作。
TAB1Fragment使用静态数据集显示图表。现在我添加了一个微调器来动态更改数据集,我正在寻找重新加载Fragment的方法,以便它可以使用正确的数据集重新显示图形。以下整数对应于Spinner的值。
static final int REPORT_PERIOD_DAY = 0;
static final int REPORT_PERIOD_WEEK = 1;
static final int REPORT_PERIOD_MONTH = 2;
static final int REPORT_PERIOD_YEAR = 3;
我有一个方法可以根据传入的int正确计算正确的数据,我正在努力的是如何创建一个Intent或任何其他方法来重新创建TAB1Fragment并将其传递给一个int参数。
这是我想要重新创建片段的地方
mReportPeriodSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
switch (position){
case 0:
//How can I re-load the Fragment here?
reloadFragment(REPORT_PERIOD_DAY);
break;
case 1:
reloadFragment(REPORT_PERIOD_WEEK);
break;
case 2:
reloadFragment(REPORT_PERIOD_MONTH);
break;
case 3:
reloadFragment(REPORT_PERIOD_YEAR);
break;
}
}
请您告诉我如何编写方法reloadFragment(Int period)的代码
答案 0 :(得分:1)
我建议重新配置现有片段,而不是使用新的报告周期构建新片段。
我猜你当前在TAB1Fragment的onCreateView中配置你的图表。如果将该配置代码移动到onResume,则可以在用户在微调器中选择某些内容时调用相同的函数。
public class TAB1Fragment extends Fragment {
int reportPeriod;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = ...
reportPeriod = REPORT_PERIOD_DAY; // default report period
return rootView;
}
@Override
public void onResume() {
super.onResume();
configureGraph();
}
private void configureGraph() {
//TODO put all the code that draws your graphs here, using reportPeriod
}
public void reloadFragment(int reportPeriod) {
this.reportPeriod = reportPeriod;
configureGraph();
}
}
如果这种方法对您不起作用,并且每次都需要一个新的片段,那么这个问题将解释如何获取片段的标记,以便您可以告诉FragmentManager替换它: Replace Fragment inside a ViewPager