如何将 Bundle 传递给 Fragment

Posted

技术标签:

【中文标题】如何将 Bundle 传递给 Fragment【英文标题】:How to pass a Bundle to a Fragment 【发布时间】:2012-10-22 11:14:51 【问题描述】:

首先让我说,我希望东海岸的每个人在飓风桑迪之后都平安无事。我很幸运,虽然我住在纽约市,但我从未失去过权力。我的想法传达给那些没有那么幸运的人。 三天后我要回去工作了,我需要一些碎片方面的帮助。我正在尝试将 Bundle 传递给 Fragment,但它不起作用。我知道我的一般片段设置正确,因为如果我不尝试传递 Bundle,它可以正常工作。所以这是我传递 Bundle 的 Activity:

public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) 
            Intent choice = new Intent(getApplicationContext(), com.MyProject.project.MyList.class);
            Bundle dataBundle = new Bundle();
            String chosenValue = values[position];
            dataBundle.putString("Level",chosenValue);
            choice.putExtras(dataBundle);
            startActivity(choice);  

现在这是我没有捆绑包的活动。这工作正常:

public void onActivityCreated(Bundle savedInstanceState) 
    super.onActivityCreated(savedInstanceState);
        String[] values = new String[]  "Enterprise", "Star Trek", "Next Generation", "Deep Space 9", "Voyager";
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, values);
        setListAdapter(adapter);


但是,当我尝试从捆绑包中获取信息时,它不起作用。这是我的代码:

public void onActivityCreated(Bundle savedInstanceState) 
    super.onActivityCreated(savedInstanceState);
    Bundle info = getArguments();


    String level = info.getString("level");
    String[] values = new String[] level, level;
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, values);
    setListAdapter(adapter);



当我运行它并在我的 Activity 中单击我的选择时,应用程序就会挂起。 LogCat 似乎没有给我太多这方面的信息。有人看到这里有什么问题吗?

谢谢!

【问题讨论】:

【参考方案1】:

您需要在 Fragment 上设置参数。

在Activity的onCreate

Fragmet myFragment = new MyFragment();
myFragment.setArguments( getIntent().getExtras() );

【讨论】:

谢谢,拉尔加。我在我的 Activity 的 onCreate 方法中实现了您在 super.OnCreate 行下方建议的两行。我没有更改任何其他内容 - 我假设我仍然需要使用 onItemClick 方法中的 putExtras 将 Bundle 附加到我的 Intent,对吧?但是,当我运行它并在 Activity 中做出选择时,我的应用程序只会告诉我“不幸的是,MyProject 已停止” 另外,我假设你的意思是: Fragment myFragment = new Fragment();对吗? 另外,我歪曲了我得到的错误。该应用程序没有挂起;它告诉我“不幸的是,MyProject 已停止。”无论我是否实现 Ralgha 建议的代码行,这都是正确的。 我还想澄清一下-您的意思是将此代码添加到包含我的片段的活动,而不是启动包含我的片段的活动的活动,对吗?如果那有意义的话。 ;) 是的,添加到包含您的片段的活动中。请在您创建片段的位置发布代码。

以上是关于如何将 Bundle 传递给 Fragment的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Bundle 中的值添加到 String?

如何将活动中的意图传递给已打开的片段

在 startActivity() 上传递一个 Bundle?

在 Bundle 中传递一堆数组

activity 给 fragment 传递参数

将对象列表传递给片段