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

问题描述 投票:0回答:3

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

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

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

java android android-fragments
3个回答
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;
    }
}

0
投票

你可以使用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);

0
投票

您可以为活动提供名称值(请不要直接执行。使用回调方法实现某些接口的活动并将其设置为片段作为接口对象),然后使用参数为下一个片段提供名称值。

另外,你真的需要使用不同的片段吗?也许你可以在一个活动中使用不同的视图,并在需要时交换它们。要实现此逻辑,您可以使用viewpager或viewflipper

© www.soinside.com 2019 - 2024. All rights reserved.