Android - 重新加载属于ViewPager的片段

时间:2014-12-01 23:34:20

标签: android-fragments android-viewpager

我需要帮助重新加载属于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)的代码

1 个答案:

答案 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