在一些片段之间填充对象变量的最佳方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在一些片段之间填充对象变量的最佳方法相关的知识,希望对你有一定的参考价值。
我需要使用从不同片段获得的数据填充自定义对象。一个选项是做一个parcelable对象并将它传递给每个片段,但我认为这是一个更好的选择,可以在活动中声明对象并从每个片段访问它而不需要移动数据。
这是最好的选择吗?
答案
您可以使用界面在片段和活动之间进行通信。
android文档说明非常简单,并提供了您需要的清晰示例,请在此处查看Communicating with Other Fragments
基本上你需要创建一个接口,在你的片段中声明它,你的活动应该实现它。如果片段中包含数据,则可以在活动中触发传递数据的事件,在活动中,您将拥有填充自定义对象的数据。
另一答案
您可以将数据存储在使用Fragment
的数据setRetainInstance(true)
中。 setRetainInstance
控制是否在活动重新创建(例如从配置更改)中保留片段实例。
在Activity类中,实例化数据片段。然后可以在相同活动的多个片段之间共享它。
示例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;
}
示例Activity
类:
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;
以上是关于在一些片段之间填充对象变量的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章