从包中获取参数

时间:2015-06-15 13:52:32

标签: android android-intent android-fragments

我正在尝试将我的Activity中的参数传递给片段,我正在使用此代码:

@Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detail);

        String message = getIntent().getStringExtra(Intent.EXTRA_TEXT);

        DetailActivityFragment fragment = new DetailActivityFragment();

        Bundle bundle = new Bundle();
        bundle.putString(INTENT_EXTRA, message);

        fragment.setArguments(bundle);
    }

我通过Intent Extra获取消息变量的值,到目前为止工作正常 然后我将它作为参数传递给我的片段然后,当我从该特定片段调用getArguments()时,它返回一个空Bundle。 有人有解决方案吗?

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Bundle bundle = getArguments();

        if (bundle != null && bundle.containsKey(DetailActivity.INTENT_EXTRA)) {
            forecast = bundle.getString(DetailActivity.INTENT_EXTRA);
        } else if (bundle == null) {
            Toast.makeText(getActivity(), "Error", Toast.LENGTH_LONG).show();
        }

    }

当我运行应用程序时,upper方法显示Toast消息“Error”

2 个答案:

答案 0 :(得分:5)

在片段中使用参数的最佳方法是使用片段的newInstance函数。创建一个静态方法,获取params并通过新的实例函数将它们传递给片段,如下所示:

public static myFragment newInstance(String param1, String param2) {
    myFragment fragment = new myFragment ();
    Bundle args = new Bundle();
    args.putString(ARG_PARAM1, param1);
    args.putString(ARG_PARAM2, param2);
    fragment.setArguments(args);
    return fragment;
}

然后在create上设置你的全局参数:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (getArguments() != null) {
        mParam1 = getArguments().getString(ARG_PARAM1);
        mParam2 = getArguments().getString(ARG_PARAM2);
    }
}

在您的主要活动中,您将创建像

这样的片段
myFragment __myFragment = myFragment.newInstance("test","test");

那应该有用

答案 1 :(得分:3)

这是一种正确的方法

发送(在活动中):

final FragmentTransaction ft = getSupportFragmentManager().beginTransaction();

final DetailActivityFragment  frg = new DetailActivityFragment ();
ft.replace(R.id.container, frg);

final Bundle bdl = new Bundle();
bdl.putString("yourKey", "Some Value");
frg.setArguments(bdl);

ft.commit();

接收(在片段中):

final Bundle bdl = getArguments();

String str = "";
try
{
    str = bdl.getString("yourKey");
}
catch(final Exception e)
{
    // Do nothing
}