我有一个“用户”对象,它有名称,电子邮件,电话号码,地址等属性。
现在我有一个名为“Register_Activity”的活动,它有不同的片段,用于设置名称,验证和设置电子邮件等。 现在在SetNameFragment中,我创建了一个User对象的实例并在其上调用setName。
现在我如何将此对象传递给下一个片段?我正在考虑使用ViewModel,但我不认为它适用于此类操作。 我一直在使用的另一种方法是在Activity中创建User实例,然后从片段中调用对象并设置其值,它可以工作,但我想确定这是否是正确的方法。
您可以在活动中包含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;
}
}
你可以使用bundle类将数据从一个片段发送到另一个片段...... First Fragment步骤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);
您可以为活动提供名称值(请不要直接执行。使用回调方法实现某些接口的活动并将其设置为片段作为接口对象),然后使用参数为下一个片段提供名称值。
另外,你真的需要使用不同的片段吗?也许你可以在一个活动中使用不同的视图,并在需要时交换它们。要实现此逻辑,您可以使用viewpager或viewflipper