Reputation: 21
I have a fragment in which I have to select a date. for this purpose, I created the fragment data (DatePicker Dialog). I would like to know why the following methods are deprecated: in the FragmentAddPaziente: onActivityResult and setTargetFragment; in the FragmentData: getTargetFragment and onActivityResult.
FragmentAggiungiPaziente
EditText nomePaz, cognomePaz, dataPaz, mailPaz, telefonoPaz;
String selectedDate;
Button aggiungiPaz;
DBHelper dbPaz;
public static final int REQUEST_CODE = 1; // Codice per identificare il risultato
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) {
// Istanzio un oggetto di tipo FragmentData
FragmentData newFragment = new FragmentData();
//Setto questo nuovo fragment in modo da poter ricevere il risultato, specificando il codice REQUEST_CODE
//setTargetFragment stabilisce la relazione tre due fragment: permette al fragment chiamato (in questo
//caso, il FragmentData), di sapere dove inviare il risultato
newFragment.setTargetFragment(FragmentAggiungiPaziente.this, REQUEST_CODE);
newFragment.show(fm, "datePicker");
}
});
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();
getFragmentManager().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;
}
@Override
//Permette di ricevere il dato dal FragmentData, specificando il codice della richiesta e il codice del risultato
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// Controllo sui codici
if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK) {
// Prelevo il dato dalla stringa
selectedDate = data.getStringExtra("selectedDate");
// Setto il valore dell'editText con il valore appena prelevato
dataPaz.setText(selectedDate);
}
}
FragmentData
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());
// Invio la data al fragment che ha chiamato questo fragment
getTargetFragment().onActivityResult(
getTargetRequestCode(),
Activity.RESULT_OK,
new Intent().putExtra("selectedDate", selectedDate)
);
}
@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);
}
Upvotes: 1
Views: 628
Reputation: 302
In google Fragment documentation, getTargetFragment is deprecated.
This method is deprecated. Instead of using a target fragment to pass results, use setFragmentResult to deliver results to FragmentResultListener instances registered by other fragments via setFragmentResultListener.
so in Fragment you should do:
childFragmentManager.setFragmentResultListener(
"KEY",
this,
{ _, result -> [... do something here] }
)
dialog.show(childFragmentManager, TAG)
and in DialogFragment
getParentFragmentManager().setFragmentResult("KEY", bundle);
Upvotes: 1