Android 在某些片段之间填充对象变量的最佳方法

Android 在某些片段之间填充对象变量的最佳方法,android,object,android-fragments,android-activity,Android,Object,Android Fragments,Android Activity,我需要用从不同片段获得的数据填充自定义对象。一种选择是创建一个可打包对象并将其传递给每个片段,但我认为在活动中声明对象并从每个片段访问它而不移动数据是更好的选择 什么是最好的选择?您可以使用接口在片段和活动之间进行通信 Android文档解释非常直接,有清晰的示例说明您需要什么,请查看这里 基本上,您需要创建一个接口,在片段中声明它,并且您的活动应该实现它。当片段中有数据时,您可以在活动中触发该事件并传递数据,在活动中您将有数据填充自定义对象。您可以将数据存储在数据片段中,该片段使用setRet

我需要用从不同片段获得的数据填充自定义对象。一种选择是创建一个可打包对象并将其传递给每个片段,但我认为在活动中声明对象并从每个片段访问它而不移动数据是更好的选择


什么是最好的选择?

您可以使用接口在片段和活动之间进行通信

Android文档解释非常直接,有清晰的示例说明您需要什么,请查看这里


基本上,您需要创建一个接口,在片段中声明它,并且您的活动应该实现它。当片段中有数据时,您可以在活动中触发该事件并传递数据,在活动中您将有数据填充自定义对象。

您可以将数据存储在数据
片段中,该片段使用
setRetainInstance(true)
setRetainInstance
控制在活动重新创建过程中是否保留片段实例(例如从配置更改)

在活动类中,实例化数据片段。然后,它可以在同一活动的多个片段之间共享

示例
数据片段
类:

public class MyDataFragment extends Fragment {
    public static MyDataFragment newInstance() {
        return new MyDataFragment();
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Retain this instance so it isn't destroyed when MainActivity and MainFragment change configuration.
        setRetainInstance(true);
    }    

    // data shared across multiple fragments of same activity
    public String myData = null;
}
public class MyActivity extends AppCompatActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // common data fragment shared by multiple fragments
    final FragmentManager fm = getSupportFragmentManager();
    MyDataFragment myDataFragment = (MyDataFragment)fm.findFragmentByTag(MY_DATA_FRAGMENT);

    if (myDataFragment == null) {
        MyDataFragment dataFragment = MyDataFragment.newInstance();
        fm.beginTransaction().add(dataFragment, MY_DATA_FRAGMENT).commit();
    }
}

public static final String MY_DATA_FRAGMENT = "MY_DATA_FRAGMENT";
示例
活动
课程:

public class MyDataFragment extends Fragment {
    public static MyDataFragment newInstance() {
        return new MyDataFragment();
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Retain this instance so it isn't destroyed when MainActivity and MainFragment change configuration.
        setRetainInstance(true);
    }    

    // data shared across multiple fragments of same activity
    public String myData = null;
}
public class MyActivity extends AppCompatActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // common data fragment shared by multiple fragments
    final FragmentManager fm = getSupportFragmentManager();
    MyDataFragment myDataFragment = (MyDataFragment)fm.findFragmentByTag(MY_DATA_FRAGMENT);

    if (myDataFragment == null) {
        MyDataFragment dataFragment = MyDataFragment.newInstance();
        fm.beginTransaction().add(dataFragment, MY_DATA_FRAGMENT).commit();
    }
}

public static final String MY_DATA_FRAGMENT = "MY_DATA_FRAGMENT";
在各种片段中,您可以访问数据片段:

@Override
public void onCreate (Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // access data fragment
    final FragmentManager fm = getFragmentManager();
    this.myDataFragment = (MyDataFragment)fm.findFragmentByTag(MyActivity.MY_DATA_FRAGMENT);
}

private void function1 () {
    // read data from data Fragment
    String dataStr = this.myDataFragment.myData;

    // write data into data Fragment
    this.myDataFragment.myData = "test_string";
}

private MyDataFragment myDataFragment = null;

也许是单身班?