#android #date #android-fragments #datepicker #android-dialogfragment
Вопрос:
У меня есть фрагмент (FragmentAggiungiPaziente), который содержит текст редактирования, с помощью которого можно выбрать дату. Когда я выбираю дату, текст редактирования не обновляется с выбранной датой. Не могли бы вы любезно помочь мне решить эту проблему? Спасибо
FragmentAggiungiPaziente
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); }
}
Комментарии:
1. Не забудьте отметить мой ответ как принятый.
Ответ №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); } });
Комментарии:
1. спасибо тебе. Теперь код работает.