为什么将意图中的信息传递给片段,而不是从片段中获取信息

时间:2019-07-07 08:27:02

标签: android android-fragments android-intent android-sqlite

我得到了一个创建应用程序的任务。在“启动画面”阶段,它被指示在启动画面中从SQLite获取列表,并将其传递给片段(我使用Intent做到了这一点)。

我的问题是,为什么不从片段中获取它,而不是将其从启动屏幕传递到主活动,再从那里传递到片段?如果不是出于某些我不知道的原因,这似乎是不必要的。

在寻找有关此问题的信息时,我什么也找不到。我想以前没有出现过,或者至少我找不到以前使用过的措词。

获取列表并将其传递给MainActivity的方法:

private void toMainActivity(ArrayList<Movie> moviesList) {

    Intent intent = new Intent(SplashActivity.this, MainActivity.class);
    intent.putParcelableArrayListExtra("moviesList", moviesList);

    startActivity(intent);
    finish();
    }

在MainActivity:

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ArrayList<Movie> moviesList = this.getIntent().getParcelableArrayListExtra("moviesList");
    Bundle listBundle = new Bundle();
    listBundle.putParcelableArrayList("moviesList", moviesList);

    Fragment mlf = new MoviesListFragment();
    mlf.setArguments(listBundle);
    ft = getSupportFragmentManager().beginTransaction();
    ft.add(R.id.fragments_container, mlf);

    ft.commit();
}

在碎片上:

Bundle listBundle = getArguments();
if (listBundle != null) {
    moviesList = getArguments().getParcelableArrayList("moviesList");
    moviesAdapter.attachMoviesList(moviesList);
}

1 个答案:

答案 0 :(得分:0)

通常这是确保您正在处理某事物的同一实例的问题。在Bundle中传递内容时,您可以确保下一个屏幕将与上一个屏幕在传递的数据实例上相同。

这是比每次查询数据库好还是坏的情况。有时候您想要保持屏幕之间的数据“连续性”,有时想要获取数据的最新副本(可以异步修改)。