【问题标题】:Fragments Android Studio片段 Android Studio
【发布时间】:2020-08-14 15:36:49
【问题描述】:

下午好,

我无法通过按返回按钮从碎片中恢复数据。

我的bandle没问题,结果正常显示,但是当它回到cpf屏幕时,值没有应用

我正在尝试分阶段创建一个注册表单,每个片段都是一个要编写的字段

//fragment Email
btnBack.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        bundle = new Bundle();
        bundle.putSerializable("object", user);
        Log.i("Bundle", bundle.toString());
        Navigation.findNavController(v).navigate(R.id.cpfFragment, bundle);
    }
});

我无法恢复数据的片段

public class CpfFragment extends Fragment {

    private User user;
    private Bundle bundle;

    public CpfFragment() {
        // Required empty public constructor
    }

    @Override
    public void onStart() {
        super.onStart();
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if(savedInstanceState != null){
            user = (User) bundle.getSerializable("object");
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_cpf, container, false);
    }

    @Override
    public void onViewCreated(@NonNull final View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        Button btnNext = view.findViewById(R.id.btnNext);
        Button btnBack = view.findViewById(R.id.btnBack);

        final EditText fieldCpf = view.findViewById(R.id.editCpf);


        btnProximo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String cpf = fieldCpf.getText().toString();

                try {
                    if (cpf.isEmpty()){
                        Toast.makeText(getContext(), "Preencha o Cpf para avançar", Toast.LENGTH_SHORT).show();
                    }
                    else{

                        user = new Usuario();
                        user.setCpf(cpf);
                        Log.i("CPF", user.getCpf());

                        bundle = new Bundle();
                        bundle.putSerializable("object", user);

                        Navigation.findNavController(v).navigate(R.id.emailFragment, bundle);
                    }
                }
                catch (Exception e ){
                    Toast.makeText(getContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
                    Log.i("ERROR BAGME CPF", e.getMessage());
                }
            }
        });

        btnVoltar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Navigation.findNavController(v).navigate(R.id.initialFragment);
            }
        });
    }
}

【问题讨论】:

    标签: java android android-studio android-layout android-fragments


    【解决方案1】:

    您不会通过捆绑包返回数据。在您的片段中创建一个接口,在您的活动中实现它,并将您的活动保存为 onAttach 方法中的所述接口。然后让 Activity 处理所有事情,例如保存数据和显示下一个片段。

    更多信息和来源:https://developer.android.com/guide/components/fragments#EventCallbacks

    【讨论】:

      【解决方案2】:

      您可以创建一个单例类并使用 getter 和 setter 保存值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-04
        • 2020-01-12
        • 2018-08-14
        • 2017-11-11
        • 1970-01-01
        • 2020-08-27
        相关资源
        最近更新 更多