更新的FragmentStatePagerAdapter不会刷新Fragment

时间:2013-08-24 17:01:27

标签: android android-layout android-fragments

我有一个Activity,有两个片段。目前设计用于纵向模式,其中一个片段仅显示一次。我在应用程序中有ViewPager和Actionbar。

第一个(主要)片段有一个按钮。点击此处,我​​需要更新文本框或其他片段的graphview。

我已经阅读了很多文章和帖子,但最后一英里的连接似乎缺失了。以下是我目前的一些细节:

  • 我正在使用FragmentStatePagerAdapter
  • 目前将getItemPosition重写为POSITION_NONE。我计划稍后对此进行优化。
  • 片段到片段的通信是通过Activity,通过接口

问题是按钮点击时,我通过PageAdapter发送的新值似乎没有传递给片段。

适配器:

public class SectionsPagerAdapter extends FragmentStatePagerAdapter {
    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    public String graphLink = "Last 24 Hours";

    @Override
    public Fragment getItem(int position) {
        // getItem is called to instantiate the fragment for the given page.
        // Return a DummySectionFragment (defined as a static inner class
        // below) with the page number as its lone argument.
        Fragment fragment = null;
        Bundle args = null;
        switch (position) {
        case 0:
            fragment = new FragmentMain();
            args = new Bundle();
            args.putInt(FragmentMain.ARG_SECTION_NUMBER, position + 1);
            break;
        case 1:
            fragment = new FragmentGraph();
            args = new Bundle();
            args.putInt(FragmentGraph.ARG_SECTION_NUMBER, position + 1);
            args.putString(FragmentGraph.linkGraph, graphLink);
            break;
        }
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }

单击主片段上的按钮,我将获得更新的值,直到监听器方法中的活动。那时我正在尝试做以下事情:

SectionsPagerAdapter sa = (SectionsPagerAdapter) mViewPager
                .getAdapter();
        sa.graphLink = link;
        sa.notifyDataSetChanged();
        mViewPager.setAdapter(sa);
        mViewPager.setCurrentItem(1);

这应该一直在更新图片段中的公共变量。该变量应该在创建过程中用于更新文本字段等。但最后一部分不起作用,因为graphLink似乎没有通过。

以下是我的Graph片段主要部分的片段:

 public class FragmentGraph extends Fragment {

    public static final String linkGraph = "Graph heading";

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

TextView graphHeader = (TextView) rootView.findViewById(R.id.graphHead);
graphHeader.setText(linkGraph);
}
}

我错过了什么?在我看来,我在最后一站做了一些愚蠢的事情。 这甚至是从另一个片段更新片段的正确方法吗?

1 个答案:

答案 0 :(得分:1)

好吧,我的愚蠢错误。这是造成问题的静态最终变量。我将其更改为私有变量,由getter / setter公开,现在一切正常。