凡/如何getIntent()。getExtras()在Android碎片? [重复](Wher

2019-06-14 17:28发布

这个问题已经在这里有一个答案:

  • 安卓:传递数据(临时演员)的片段 4个答案

随着活动,我曾经这样做:

在活动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点击时我在哪里经过列表项的意图),然后传递到一组标签片段的(通过一个片段的活性)和余需要任一选项卡能够得到的花絮。 (我希望这是可能的吗?)

Answer 1:

我倾向于做,我相信这是谷歌旨在让开发者做太多,是仍然可以从临时演员Intent中的Activity ,然后通过参数实例他们通过任何额外的数据片段。

实际上,有一个例子就说明了这一概念的Android开发博客,你会在几个API演示中看到这一点。 虽然该具体实例中,给出了API 3.0+片段,相同的流时使用适用FragmentActivityFragment从支持库。

你先检索意图演员像往常一样在你的活动,并把它们作为参数传递给片段:

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

在直接调用构造函数代替,它可能更容易使用该插头的参数到你的片段的静态方法。 这种方法通常被称为newInstance在由谷歌给出的例子 。 这里实际上是一个newInstance在方法DetailsFragment ,所以我不能确定为什么它没有在上面的代码片段中使用...

不管怎么说,在创建片段设置为参数中的所有演员,将可通过调用getArguments() 由于这将返回一个Bundle ,它的使用是类似于一个临时演员的Activity

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)

}


Answer 2:

你仍然可以使用

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

fragment中,您只需要调用getActivity()第一:

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

这样可以节省你不必编写一些代码。



文章来源: Where/How to getIntent().getExtras() in an Android Fragment? [duplicate]