【问题标题】:Difference between StartActivity and FragmentTransactionStartActivity 和 FragmentTransaction 的区别
【发布时间】:2014-09-01 18:19:24
【问题描述】:

有什么区别

Intent i = new Intent(getActivity(), HomeworkPagerActivity.class);
i.putExtra(HomeworkFragment.EXTRA_HOMEWORK_ID, c.getId());
startActivity(i);

和:

HomeworkFragment newFragment = new HomeworkFragment();
Bundle args = new Bundle();
args.putInt(HomeworkFragment.ARG_POSITION, position);
newFragment.setArguments(args);

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);

transaction.commit();

我正在使用一个 Fragment 来启动另一个 Fragment。

但是,应该使用哪一个?为什么?

此外,我需要将数据从子 Fragment (HomeworkFragment) 传输回最初启动它的 Fragment。哪种设置可以轻松传输数据(如身份证号)?

【问题讨论】:

  • "应该使用哪一个,为什么?" : 恕我直言,你不应该使用它们。 Fragments 的设计理念是它们应该是独立的和可重复使用的。如果一个Fragment“知道”某个特定的Activity 或另一个Fragment,你就破坏了那个模型。正如 Little Child 所提到的,您的 Fragments 可以定义接口并使用这些接口与父 Activity 进行通信,这应该允许间接控制和通信。

标签: android android-intent android-fragments fragment


【解决方案1】:

好的,看。

Intent i = new Intent(getActivity(), HomeworkPagerActivity.class);
i.putExtra(HomeworkFragment.EXTRA_HOMEWORK_ID, c.getId());
startActivity(i);  

这将开启一个全新的Activity,并拥有它自己的生命周期。在哪里:

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 

transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null); 

transaction.commit();   

R.id.fragment_container 中的Fragment 替换为newFragment


但是,应该使用哪一个?为什么?

取决于您的需求。

另外,我需要从子 Fragment 传输数据 (HomeworkFragment) 回到第一个启动它的 Fragment 地方。哪种设置允许传输数据(如 ID 号) 容易地?

假设你有两个Fragments,你可以使用接口将数据先传回activity,然后传回第二个fragment。

【讨论】:

    【解决方案2】:

    一个人开始一项活动。

    另一个实例化一个片段并将其附加到fragment_container,这是调用活动布局的一部分。

    【讨论】:

      猜你喜欢
      • 2012-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-22
      • 2011-12-23
      • 2014-09-22
      • 2019-07-15
      • 1970-01-01
      相关资源
      最近更新 更多