Android / Android中的getIntent()。getExtras()方法

有了活动,我曾经这样做:

在活动1中:

Intent i = new Intent(getApplicationContext(), MyFragmentActivity.class); i.putExtra("name", items.get(arg2)); i.putExtra("category", Category); startActivity(i); 

活动2:

 Item = getIntent().getExtras().getString("name"); 

你如何使用碎片来做到这一点? 我也在使用兼容性库v4。

它是否在FragmentActivity? 还是实际的片段? 它进入哪个方法? 的onCreate? onCreateView? 另一个?

我能看到示例代码吗?

编辑:值得注意的是,我试图保持活动1作为一个活动(或实际ListActivity,我通过listitem意图单击时),然后传递给一组tabbed-fragments(通过片段活动),我需要任何标签才能获得额外的。 (我希望这是可能的?)

我倾向于这样做,我相信Google也希望开发人员也这样做,就是在活动中仍然从Intent中获得额外的内容,然后通过实例化参数来将任何额外的数据传递给片段。

在Android开发博客上实际上有一个例子来说明这个概念,你也可以在几个API演示中看到这个例子。 虽然这个特定的例子是针对API 3.0+片段给出的,但是当使用支持库中的FragmentActivityFragment时,同样的stream程也适用。

您首先像往常一样在您的活动中检索意图附加项,并将其作为parameter passing给片段:

 public static class DetailsActivity extends FragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // (omitted some other stuff) if (savedInstanceState == null) { // During initial setup, plug in the details fragment. DetailsFragment details = new DetailsFragment(); details.setArguments(getIntent().getExtras()); getSupportFragmentManager().beginTransaction().add( android.R.id.content, details).commit(); } } } 

不是直接调用构造函数,而是使用静态方法将参数插入片段中可能更容易。 在Google给出的例子中,这种方法通常被称为newInstance 。 在DetailsFragment实际上有一个newInstance方法,所以我不确定为什么它不被用在上面的代码片段中。

无论如何,创build片段时作为参数提供的所有额外内容将通过调用getArguments()来提供。 由于这会返回一个Bundle ,它的用法和Activity中的extras类似。

 public static class DetailsFragment extends Fragment { /** * Create a new instance of DetailsFragment, initialized to * show the text at 'index'. */ public static DetailsFragment newInstance(int index) { DetailsFragment f = new DetailsFragment(); // Supply index input as an argument. Bundle args = new Bundle(); args.putInt("index", index); f.setArguments(args); return f; } public int getShownIndex() { return getArguments().getInt("index", 0); } // (other stuff omitted) } 

你仍然可以使用

 String Item = getIntent().getExtras().getString("name"); 

fragment ,您只需要先调用getActivity()

 String Item = getActivity().getIntent().getExtras().getString("name"); 

这节省了你不得不写一些代码。