将数据从 Activity 发送到片段的最佳方式是什么

问题描述 投票:0回答:1

所以我的问题很简单。我有两个活动(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);
java android android-fragments android-intent android-activity
1个回答
0
投票

有 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();

但是大多数开发人员正在使用第三种方式在之间传递数据 活动碎片

© www.soinside.com 2019 - 2024. All rights reserved.