从多个片段设置对象值的正确方法是什么?

时间:2019-02-15 09:02:33

标签: java android android-fragments

我有一个“用户”对象,它具有名称,电子邮件,电话号码,地址等属性。

现在,我有一个名为“ Register_Activity”的活动,其中包含用于设置名称,验证和设置电子邮件等的不同片段。
现在,在SetNameFragment中,创建User对象的实例,并在其上调用setName。

现在如何将该对象传递给下一个片段? 我当时在考虑使用ViewModel,但我认为这不是用于此类操作的。
我一直在使用的另一种方法是在Activity中创建一个User实例,然后从片段中调用该对象并设置其值,虽然可以,但是我想确定这是否正确。

3 个答案:

答案 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