Android 在片段之间发送数据

Android 在片段之间发送数据,android,fragment,android-tablayout,Android,Fragment,Android Tablayout,我使用本教程学习了如何在片段之间传递数据: 如果我有两个碎片的话,效果会很好。但是我的应用程序需要更多的片段。片段是表格布局上的选项卡。当我在相邻的两个标签之间来回切换时,这很好。但只要我从tab0切换到更远的选项卡(tab5),发送消息,然后在tab0上检查它,EditText就会返回它的原始值 更改EditText的值时,会更改选项卡标题的值。并且它会正确更新。(我从tab0转到tab5,发送消息,tab0的标题更改,因此消息被接收。)但当我返回到tab0时,它会更改回其原始值(也是tab

我使用本教程学习了如何在片段之间传递数据:

如果我有两个碎片的话,效果会很好。但是我的应用程序需要更多的片段。片段是表格布局上的选项卡。当我在相邻的两个标签之间来回切换时,这很好。但只要我从tab0切换到更远的选项卡(tab5),发送消息,然后在tab0上检查它,EditText就会返回它的原始值

更改EditText的值时,会更改选项卡标题的值。并且它会正确更新。(我从tab0转到tab5,发送消息,tab0的标题更改,因此消息被接收。)但当我返回到tab0时,它会更改回其原始值(也是tab标题,但这是正确的工作方式)

这就像发生了期望的更改,但当我切换回时,它会返回原始值。它是否与破坏和保存状态有关?如何摆脱这个

在STab.java中(选项卡的代码):

同样在
STab.java
中,在onViewCreated方法中:

spinnerStructureBonusTile.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
            SD.setStructureBonusTileSpinner(spinnerStructureBonusTile.getSelectedItemPosition(), tabNumber);
        }
    });

如果您将数据从片段A传输到片段B,请执行以下操作

1.片段A->基本活动->片段B(不推荐) 您可以使用父活动传输数据。 2.使用Bundle对象

public static Fragment newInstance(String param1, String param2) {
    BlankFragment fragment = new BlankFragment();
    Bundle args = new Bundle();
    args.putString(ARG_PARAM1, param1);
    args.putString(ARG_PARAM2, param2);
    fragment.setArguments(args);
    return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
        mParam1 = getArguments().getString(ARG_PARAM1);
        mParam2 = getArguments().getString(ARG_PARAM2);
    }
}

默认情况下,屏幕外页面限制设置为1,因此将从适配器重新创建那些超出相邻两个页面的片段,您说它们可以工作

如果你不打算执行繁重的任务,改变这个限制就足够了

mViewPager.setOffScreenPageLimit(fragmentCount - 1)
PD:作为一个提示,你不应该有超过3个标签,如果你能想出一个更好的方法而不是这个,那就更好了


PD2:你还应该发布相关代码

请展示一些代码。不打算回答,因为这只是一个瞎拍,但如果它可以处理2个片段,而不能处理更多片段,那么它们可能只是在交换机上刷新,请尝试以下方法:mViewPager.setOffscreenPageLimit(fragmentCount-1)@jmedilla Great,这确实奏效了。非常感谢。请把它写在一个答案里,然后我可以标记它。很公平,我添加了一些代码。在这种情况下,没有繁重的任务,多点标签就可以了。如果我有更多,我肯定会用别的东西。再次感谢!
public static Fragment newInstance(String param1, String param2) {
    BlankFragment fragment = new BlankFragment();
    Bundle args = new Bundle();
    args.putString(ARG_PARAM1, param1);
    args.putString(ARG_PARAM2, param2);
    fragment.setArguments(args);
    return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
        mParam1 = getArguments().getString(ARG_PARAM1);
        mParam2 = getArguments().getString(ARG_PARAM2);
    }
}
mViewPager.setOffScreenPageLimit(fragmentCount - 1)