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消息“错误”。
在片段中使用参数的最好方法是使用片段的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)
那应该工作