我有一个活动,有两个片段。目前设计用于纵向模式,一次只显示一个片段。我在应用程序中有 ViewPager 和 Actionbar。
第一个(主)片段有一个按钮。单击此按钮后,我需要更新文本框或另一个片段上的图形视图。
我已经阅读了许多关于此的文章和线程,但最后一英里的连接似乎缺失了。以下是我目前地位的一些细节:
- 我正在使用 FragmentStatePagerAdapter
- 当前将 getItemPosition 覆盖为 POSITION_NONE。我计划稍后对此进行优化。
- Fragment到Fragment的通信是通过Activity,通过一个接口
问题是在单击按钮时,我通过 PageAdapter 发送的新值似乎没有传递到 Fragment。
适配器:
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);
}
}
我错过了什么?在我看来,我在最后一站做了一些愚蠢的事情。这甚至是从另一个片段更新片段的正确方法吗?