如何将 Bundle 传递给 Fragment

3
首先,我希望飓风桑迪过后东海岸的每个人都平安无事。虽然我住在纽约市,但很幸运我甚至没有停电。我的心与那些不幸的人在一起。
现在,三天后回到工作中,我需要关于片段的帮助。我试图向片段传递一个Bundle,但它没有起作用。我知道我已经正确设置了一般片段,因为如果我不尝试传递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);  }

现在这里是没有 Bundle 的活动。 这个可以正常工作:

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

}

然而,当我尝试从Bundle中获取信息时,它并不起作用。这是我的代码:

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个回答

5

您需要在片段上设置参数。

在活动的onCreate方法中:

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

谢谢,Ralgha。我在我的Activity的onCreate方法中,在super.OnCreate行下面实现了你建议的两行代码。我没有改变其他任何东西 - 我假设我仍然需要在onItemClick方法中使用putExtras将Bundle附加到我的Intent中,对吗?但是,当我运行这个应用程序并在Activity中进行选择时,我的应用程序只告诉我“很抱歉,MyProject已停止”。 - Melanie
1
另外,我假设你的意思是:Fragment myFragment = new Fragment(); 对吗? - Melanie
另外,我错误地描述了我遇到的错误。应用程序没有挂起;它告诉我“很抱歉,MyProject已停止”。无论我是否实现Ralgha建议的代码行,这都是真实的。 - Melanie
我也想澄清一下 - 你的意思是将这段代码添加到包含我的片段的 Activity 中,而不是启动包含我的片段的 Activity 的 Activity 中,对吗?如果有任何疑问,请告诉我。 ;) - Melanie
我已经尝试过了,但行为仍然相同。我还尝试将其添加到片段本身的onCreate方法中,但在那里getIntent未定义。 - Melanie
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接