我有一个“用户”对象,它具有名称,电子邮件,电话号码,地址等属性。
现在,我有一个名为“ Register_Activity”的活动,其中包含用于设置名称,验证和设置电子邮件等的不同片段。
现在,在SetNameFragment中,创建User对象的实例,并在其上调用setName。
现在如何将该对象传递给下一个片段?
我当时在考虑使用ViewModel,但我认为这不是用于此类操作的。
我一直在使用的另一种方法是在Activity中创建一个User实例,然后从片段中调用该对象并设置其值,虽然可以,但是我想确定这是否正确。
答案 0 :(得分:0)
您可以在活动中包含User对象
public class MainActivity extends AppCompatActivity{
User userInfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
UserInfo = new User();
}
}
在Fragments中,您可以访问该对象并设置其值
public class Fragment1 extends Fragment {
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment1);
((MainActivity)getActivity()).userInfo.setUserName("UserName")
.....
.....
return view;
}
}
public class Fragment2 extends Fragment {
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment2);
((MainActivity)getActivity()).userInfo.setUserEmail("UserEmail")
// set Other values
.....
.....
return view;
}
}
答案 1 :(得分:0)
您可以使用包类将数据从一个碎片发送到另一碎片... 第一片段 第1步:创建Bundle类,
Bundle bundle = new Bundle();
bundleFirstFragment.putString("name","John snow");
第2步:将数据包附加到片段上,例如
FragmentTransaction transaction = getFragmentManager().beginTransaction();
Fragment secondFragment= new SecondFragment();
secondFragment.setArguments(bundle );
transaction.replace(R.id.container, secondFragment);
transaction.addToBackStack(null);
transaction.commit();
第二个片段..
Bundle bundle = getArguments();
String name = bundle.getString("name")
Log.v("name value :"+name);
答案 2 :(得分:0)
您可以为活动提供名称值(请不要直接执行。使活动使用回调方法实现某些接口并将其设置为fragment作为接口对象),然后使用参数为下一个片段提供名称值。
此外,您真的需要使用其他片段吗?也许您可以只在一个活动中使用不同的视图,并在需要时交换它们。要实现此逻辑,您可以使用viewpager或viewflipper