【问题标题】:Fragment - EditText with DatePickerDialog Fragment片段 - 带有 DatePickerDialog 片段的 EditText
【发布时间】:2021-12-09 19:59:30
【问题描述】:

我有一个片段 (FragmentAggiungiPaziente),其中包含一个 EditText,用于选择日期。当我选择日期时,edittext 不会随所选日期更新。你能帮我解决这个问题吗?谢谢

片段AggiungiPaziente

EditText nomePaz, cognomePaz, dataPaz, mailPaz, telefonoPaz;
Button aggiungiPaz;
DBHelper dbPaz;
View view;


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    view = inflater.inflate(R.layout.fragment_aggiungi_paziente, container, false);

    nomePaz = view.findViewById(R.id.nomePazNew);
    cognomePaz = view.findViewById(R.id.cognomePazNew);

    final FragmentManager fm = ((AppCompatActivity)getActivity()).getSupportFragmentManager();
    dataPaz = view.findViewById(R.id.dataPazNew);

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

            FragmentData newFragment = new FragmentData();
            newFragment.show(fm, "data");
         
            getChildFragmentManager().setFragmentResultListener("chiaveRichiesta", getViewLifecycleOwner(), new FragmentResultListener() {
                @Override
                public void onFragmentResult(@NonNull String requestKey, @NonNull Bundle result) {
                    String risultato = result.getString("chiaveRisultato");
                    dataPaz.setText(risultato);
                }
            });


        }

    });

    mailPaz = view.findViewById(R.id.mailPazNew);
    telefonoPaz = view.findViewById(R.id.telefonoPazNew);
    dbPaz = new DBHelper(getActivity());
    //
    aggiungiPaz = view.findViewById(R.id.aggiungiPazBtn);
    aggiungiPaz.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String nome = nomePaz.getText().toString();
            String cognome = cognomePaz.getText().toString();
            String data = dataPaz.getText().toString();
            String mail = mailPaz.getText().toString();
            String telefono = telefonoPaz.getText().toString();
            Sessione sessione = new Sessione(getActivity());
            String mail_medico = sessione.getSessione();

            if (nome.equals("") || cognome.equals("") || data.equals("") || mail.equals("") || telefono.equals("")){
                Toast.makeText(getActivity(), "Inserisci tutti i campi", Toast.LENGTH_SHORT).show();
            } else {
                boolean controlloPaz = dbPaz.controlloPaziente(mail_medico,nome,cognome,data,mail,telefono);
                if (controlloPaz==true){
                    boolean inserisci = dbPaz.inserisciPaziente(mail_medico, nome,cognome, data,mail,telefono);
                    if(inserisci==true){
                        Toast.makeText(getActivity(), "Paziente inserito con successo", Toast.LENGTH_SHORT).show();
                        getParentFragmentManager().beginTransaction().replace(R.id.frameLayoutMain,new FragmentListaPazienti()).addToBackStack(null).commit();
                    } else {
                        Toast.makeText(getActivity(), "Inserimento fallito", Toast.LENGTH_SHORT).show();
                    }
                } else {
                        Toast.makeText(getActivity(), "Paziente già inserito", Toast.LENGTH_SHORT).show();
                }
            }
        }
    });
    return view;
}

下面这个是包含日期选择器对话框的片段。我使用了 setFragmentResultListener 监听器

片段数据

public class FragmentData extends DialogFragment implements 
DatePickerDialog.OnDateSetListener {

final Calendar c = Calendar.getInstance();
@Override
 public void onDateSet(DatePicker datePicker, int i, int i1, int i2) {
    // i:anno, i1:mese, i2:giorno
    c.set(Calendar.YEAR, i);
    c.set(Calendar.MONTH, i1);
    c.set(Calendar.DAY_OF_MONTH, i2);
    String selectedDate = new SimpleDateFormat("dd/MM/yyyy", Locale.ITALIAN).format(c.getTime());

   
    Bundle risultato = new Bundle();
    risultato.putString("chiaveRisultato",selectedDate);
    getParentFragmentManager().setFragmentResult("chiaveRichiesta", risultato);



}

@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
    int anno = c.get(Calendar.YEAR);
    int mese = c.get(Calendar.MONTH);
    int giorno = c.get(Calendar.DAY_OF_MONTH);

    return new DatePickerDialog(getActivity(), FragmentData.this, anno, mese, giorno);
}

}

【问题讨论】:

  • 别忘了将我的答案标记为已接受。

标签: android date android-fragments datepicker android-dialogfragment


【解决方案1】:

使用 FragmentManager 代替您的 getChildFragmentManager() 检查以下代码:

     fm.setFragmentResultListener("chiaveRichiesta", getViewLifecycleOwner(), new FragmentResultListener() {
            @Override
            public void onFragmentResult(@NonNull String requestKey, @NonNull Bundle result) {
                String risultato = result.getString("chiaveRisultato");
                dataPaz.setText(risultato);
            }
        });

【讨论】:

  • 谢谢你。现在,代码可以工作了。
猜你喜欢
  • 2021-12-08
  • 2019-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多