如何从活动中获取值(String),然后在Fragment中使用它? 发生错误
fragment.java
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
String strtext = getArguments().getString("edttext");
View rootView = inflater.inflate(R.layout.fragment_user_info,
container, false);
return rootView;
}
activity.java
Bundle bundle = new Bundle();
bundle.putString("edttext", "From Activity");
UserInfoFragment fragobj = new UserInfoFragment();
fragobj.setArguments(bundle);
答案 0 :(得分:1)
这就是您当前代码中发生的事情:
您创建片段
在onCreateView()
方法中,您可以获得参数
您可以在“活动”中设置参数。
换句话说,您在之前调用了参数,并设置了它们。根据Fragment Documentation,您应该使用静态方法来实例化Fragments。它看起来像下面这样。
在Fragment类中,添加此代码
/**
* Create a new instance of UserInfoFragment, initialized to
* show the text in str.
*/
public static MyFragment newInstance(String str) {
MyFragment f = new MyFragment();
// Supply index input as an argument.
Bundle args = new Bundle();
args.putString("edttext", str);
f.setArguments(args);
return f;
}
现在,在您的活动中,执行以下操作:
//Bundle bundle = new Bundle();
//bundle.putString("edttext", "From Activity");
//UserInfoFragment fragobj = new UserInfoFragment();
//fragobj.setArguments(bundle);
UserInfoFragment fragobj = UserInfoFragment.newInstance("From Activity");
请注意,现在,您甚至不需要创建一个Bundle并在Activity类中设置它,它由静态newInstance()
方法处理。
答案 1 :(得分:1)
错误是NullPointerException
,是吗?
这是因为你读了参数(在片段的构造函数中):
String strtext = getArguments().getString("edttext");
分配之前(在片段的构造函数调用之后的活动中):
fragobj.setArguments(bundle);
保持构造函数简单。最佳解决方案是根据本指南https://stackoverflow.com/a/9245510/2444099创建静态工厂方法newInstance(String edttext)
,如下所示:
public static UserInfoFragment newInstance(String edttext) {
UserInfoFragment myFragment = new UserInfoFragment();
Bundle args = new Bundle();
args.putInt("edttext", edttext);
myFragment.setArguments(args);
return myFragment;
}
然后在需要获取新的片段实例时使用此工厂方法而不是构造函数。