从捆绑中获取参数

Dim*_*los 3 android android-intent android-fragments

我试图将参数从我的Activity传递给Fragment,并且正在使用以下代码:

@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);
    }
Run Code Online (Sandbox Code Playgroud)

我正在通过Intent Extra获取message变量的值,到目前为止,它工作正常。
然后,我将其作为参数传递给我的片段,但是,当我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();
        }

    }
Run Code Online (Sandbox Code Playgroud)

当我运行应用程序时,上部方法将显示一条Toast消息“错误”。

Sif*_*fis 5

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

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;
}
Run Code Online (Sandbox Code Playgroud)

然后在创建时设置全局参数:

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

    if (getArguments() != null) {
        mParam1 = getArguments().getString(ARG_PARAM1);
        mParam2 = getArguments().getString(ARG_PARAM2);
    }
}
Run Code Online (Sandbox Code Playgroud)

在您的主要活动上,您将创建片段,例如

myFragment __myFragment = myFragment.newInstance("test","test");
Run Code Online (Sandbox Code Playgroud)

那应该工作