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+片段给出的,但是当使用支持库中的FragmentActivity
和Fragment
时,同样的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");
这节省了你不得不写一些代码。