Autore Topic: Data e Ora dai DatePickerFragment e TimePicker all'activty che li invoca  (Letto 349 volte)

Offline ciko2k

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
Salve ragazzi.. vi chiedo una mano poichè sono nuovo dell'ambiente android..

sto implementando nella MainActivity un DatePickerFragmen e un TimePickerFrgagment.
una volta selezionati data e ora,vorrei passare al main le relative stringhe generate nei frag

Pensavo di usare un dato globale con 2 campi data e ora, che possono essere settati nel frag e prelevati nella main, ma probabilmente faccio qualche errore logico e la cosa non pare funzionare.
in particolare le istruzion:
MyApplication.impo.setData(formattedDate));
MyApplication.impo.setOra(String.valueOf(hourOfDay + minute));
all'interno dei frag hanno la parola impo in rosso.

Oppure pensavo di passere i dati tramite intent, ma la cosa non mi sembra possibile perchè l'intent non modifica i campi della main già esistente,ma mi genera una nuova main con il campo settato, a meno che non ci sia il modo di modificare l'activity che contiene il frag, e non generarne una nuova

vi ringrazio in anticipo per l'aiuto  :D :D

PS: qui la documentazione dei picker http://developer.android.com/guide/topics/ui/controls/pickers.html, dalla quale non riesco a capire come tornare all'activity i dati impostati..

Codice (Java): [Seleziona]
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button orafrag=(Button)findViewById(R.id.button2);
        Button datafrag=(Button)findViewById(R.id.button3);
       
        TextView orav = (TextView) this.findViewById(R.id.textView);
        TextView datav = (TextView) this.findViewById(R.id.textView3);
       
       
        //creo una istanza di Myapplication che contiene ora e data della notifica.
        //devono essere impostati in DatePickerFragment e DatePickerFragment

        MyApplication impo=new MyApplication();

        datav.setText(impo.getData());
        orav.setText(impo.getOra());

        //fragment data e ora

        orafrag.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {

                DialogFragment picker1 = new TimePickerFragment();
                picker1.show(getFragmentManager(), "timePicker");

            }
        });

        datafrag.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {

                DialogFragment picker2 = new DatePickerFragment();
                picker2.show(getFragmentManager(), "datePicker");

            }
        });

       
            }
        });

Codice (Java): [Seleziona]
import android.app.Application;

public class MyApplication extends Application {

    private String mdata;
    private String mora;

    public String getData() { return mdata; }

    public String getOra() { return mora;}

    public void setData(String data) {  this.mdata=data;  }
    public void setOra(String ora) {  this.mora=ora;  }
}

Codice (Java): [Seleziona]
import java.util.Calendar;

public  class TimePickerFragment extends DialogFragment
        implements TimePickerDialog.OnTimeSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current time as the default values for the picker
        final Calendar c = Calendar.getInstance();
        int hour = c.get(Calendar.HOUR_OF_DAY);
        int minute = c.get(Calendar.MINUTE);

        // Create a new instance of TimePickerDialog and return it
        return new TimePickerDialog(getActivity(), this, hour, minute,
                DateFormat.is24HourFormat(getActivity()));
    }

    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        // Do something with the time chosen by the user

        String oramin= String.valueOf(hourOfDay)+":"+String.valueOf(minute);

        MyApplication.impo.setOra(String.valueOf(hourOfDay + minute));
        //vorrei salvare nel campo ora di impo istanziato in OnCreate, la stringa passata dal TimePiker
       
    }
}

Codice (Java): [Seleziona]
public class DatePickerFragment extends DialogFragment
        implements DatePickerDialog.OnDateSetListener {


    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);

// Create a new instance of DatePickerDialog and return it
        return new DatePickerDialog(getActivity(), this, year, month, day);
    }

    @Override
    public void onDateSet(DatePicker view, int year, int month, int day) {
        Calendar c = Calendar.getInstance();
        c.set(year, month, day);

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String formattedDate = sdf.format(c.getTime());

         MyApplication.impo.setData(formattedDate));
        //vorrei salvare nel campo data di impo istanziato in OnCreate, la stringa passata dal pikerDate ,formattedDate.

    }
}
« Ultima modifica: 24 Aprile 2016, 08:58:32 CEST da ciko2k »

Offline ciko2k

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
Re:Data e Ora dai DatePickerFragment e TimePicker all'activty che li invoca
« Risposta #1 il: 26 Aprile 2016, 11:41:56 CEST »
0
Peccato che nessuno abbia risposto..
comunque ho risolto in parte con il metodo getActivity, che permette di accedere alle risorse dell'activity che ospita il fragment.

Codice (Java): [Seleziona]
@Override
    public void onDateSet(DatePicker view, int year, int month, int day) {
        Calendar c = Calendar.getInstance();
        c.set(year, month, day);

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String formattedDate = sdf.format(c.getTime());

// textView3 fa parte del layout dell'activity

        TextView tv = (TextView) getActivity().findViewById(R.id.textView3);
        tv.setText(formattedDate);

    }

spero questo possa essere utile ad altri..
resta il problema di condividere un dato globale tra più activity e fragment..
per il quale chiedo una mano..
grazie

Offline pietroconti89

  • Utente normale
  • ***
  • Post: 164
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note 3 N9005
  • Sistema operativo:
    Windows / Mac OSX
Re:Data e Ora dai DatePickerFragment e TimePicker all\'activty che li invoca
« Risposta #2 il: 26 Aprile 2016, 14:22:16 CEST »
0
Ciao in genere un buon sistema è quello di usare le callback  ;-)

Post unito: 26 Aprile 2016, 14:31:15 CEST
altrimenti puoi salvare / leggere i dati tramite le sharedpreferences .... i sistemi sono molti
« Ultima modifica: 26 Aprile 2016, 14:31:15 CEST da pietroconti89, Reason: Merged DoublePost »