所以我的问题很简单。我有两个活动(splash 和主活动),3 个片段将放置在主活动上。我想从启动屏幕上的 api 获取数据,并将获取的数据显示在其中一个片段上。我怎样才能做到这一点?最好的方法是什么?
ive 尝试将数据发送到主活动,然后使用片段集参数再次发送。但我认为这并不是处理这种情况的好方法。
Intent intent = new Intent(SplashScreen.this, MainActivity.class);
intent.putExtra("Data", new Gson().toJson(dataList));
Bundle bundle = new Bundle();
bundle.putString("Data", getIntent().getStringExtra("Data"));
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();;
HomeFragment homeFragment = new HomeFragment();
homeFragment.setArguments(bundle);
transaction.replace(R.id.main_screen, homeFragment).commit();
Bundle bundle = this.getArguments();
String stringData = bundle.getString("Data");
Type type = new TypeToken<ArrayList<Data>(){}.getType();
ArrayList<Data> dataList = new Gson().fromJson(stringData, type);
有 2-3 种方法可以从 Activity 访问 Fragment 中的数据。我们根据自己的需要来使用
1.您可以直接访问父Activity数据。该解决方案集成了您的Activity和Fragment之间的紧密耦合
活动
public class MyActivity extends Activity {
private String myString = "hello";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
...
}
public String getMyData() {
return myString;
}
}
Fragment
public class MyFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
MyActivity activity = (MyActivity) getActivity();
String myDataFromActivity = activity.getMyData();
return view;
}
}
2. 将数据保存在应用程序类变量中并从应用程序类的片段中访问它
3 使用参数将 Activity 之间的数据传递到 Frametn。
Bundle bundle = new Bundle();
String myMessage = "Stackoverflow";
bundle.putString("message", myMessage );
FragmentClass fragInfo = new FragmentClass();
fragInfo.setArguments(bundle);
transaction.replace(R.id.fragment_single, fragInfo);
transaction.commit();
但是大多数开发人员正在使用第三种方式在之间传递数据 活动碎片