Autore Topic: NavigationDrawer / Fragment con DialogDataPicker  (Letto 394 volte)

Offline AliceInWonderland

  • Nuovo arrivato
  • *
  • Post: 23
  • Respect: +1
    • Github
    • Google+
    • Raffaella Pivetta
    • pivetta.raffaella@hotmail.it
    • Mostra profilo
  • Dispositivo Android:
    samsung galaxy nexus ( android 4.3 )
  • Sistema operativo:
    window 7
NavigationDrawer / Fragment con DialogDataPicker
« il: 30 Aprile 2015, 12:47:19 CEST »
0
La mia applicazione ha un semplice NavigationDrawer che cambia i fragment in base al tocco della sezione ( normale funzionamento) il problema mi sorge quanto dentro il Fragment_ore_permesso cerco di avviare DialogDataPicker sull' EditText (android:id="@+id/GiornoOre) nel layout fragment_permesso_ferie.xml.
Senza i fragment qiundi trovandomi in una semplice Activity lo utilizzo cosi:
Codice (Java): [Seleziona]
//gestioneDatapicker per compleanno
        private DatePickerDialog BirthdayDatePickerDialog;
        private SimpleDateFormat dateFormatter;
        //

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.register);
                setUpViews();

                dateFormatter = new SimpleDateFormat( "dd-MM-yyyy", Locale.ITALY);  
                edt_birthday.setInputType(InputType.TYPE_NULL);
                setDateTimeField();

                sp_questions_register  =(Spinner) findViewById(R.id.spinner1);
                adapter = ArrayAdapter.createFromResource(this, R.array.question, android.R.layout.simple_spinner_item);
                adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                sp_questions_register.setAdapter(adapter);
                sp_questions_register.setOnItemSelectedListener(this);

                //cliccando sul cerchietto si sceglie la propria immagine di profilo tra le foto in memoria nel cel
                selectPhoto.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {

                                // in onCreate or any event where your want the user to select a file
                                Intent intentPhoto = new Intent();
                                intentPhoto.setType("image/*");
                                intentPhoto.setAction(Intent.ACTION_GET_CONTENT);
                                startActivityForResult(Intent.createChooser(intentPhoto,"Select Picture"), SELECT_PICTURE);
                        }
                });

private void setDateTimeField() {
                edt_birthday.setOnFocusChangeListener(this);

                Calendar newCalendar = Calendar.getInstance();
                BirthdayDatePickerDialog = new DatePickerDialog(this, R.style.DatePickerStyle, new OnDateSetListener() {
                        //     BirthdayDatePickerDialog = new DatePickerDialog(this, new OnDateSetListener() {

                        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                                Calendar newDate = Calendar.getInstance();
                                newDate.set(year, monthOfYear, dayOfMonth);
                                edt_birthday.setText(dateFormatter.format(newDate.getTime()));
                        }

                },newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.WEEK_OF_MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));

                BirthdayDatePickerDialog.setTitle("");

        }

e tutto funziona senza problemi... ora il problema mi sorge quando mi trovo dentro un fragment dato che il setOnFocusChangeListener() vuole come parametro un Listener e non posso accedere al listener dell'activity direttamente facendo "this"
Codice (Java): [Seleziona]
public static class Fragment_ore_permesso extends Fragment {
        //TODO inserire il calendario in permesso ore

        private static final String ARG_SECTION_NUMBER = "section_number";
        private View rootView;
        private ImageView img_Ore;
        private TextView nome_Dip_ore;
        private TextView nome_ore;
        private EditText cliente_ore;
        private EditText responsabileInternoOre;
        private TextView tipologiaRichiestaOre;
        private Spinner spinnerOre;
        private EditText giornoOre;
        private EditText numeroOre;
        private Button bt_send_Ore;
        private String ore;
        private Ore mOre;

        //gestioneDatapicker
        private DatePickerDialog OreDatePickerDialog;
        private SimpleDateFormat dateFormatter;



        public static Fragment_ore_permesso newIstanceOrePermesso(int sectionNumber){
            Fragment_ore_permesso fragment = new Fragment_ore_permesso();
            Bundle args = new Bundle();
            args.putInt(ARG_SECTION_NUMBER, sectionNumber);
            fragment.setArguments(args);
            return fragment;
        }

        public Fragment_ore_permesso (){ }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            Log.i("fragment_ore_permesso", "onCreateView");
            rootView = inflater.inflate(R.layout.fragment_ore_permesso,container, false);

            setView();

            dateFormatter = new SimpleDateFormat( "dd-MM-yyyy", Locale.ITALY);
            giornoOre.setInputType(InputType.TYPE_NULL);


            setDateTimeField();

            ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this.getActivity(), R.array.ore,android.R.layout.simple_spinner_item);
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            spinnerOre.setAdapter(adapter);
            ore =((Spinner) rootView.findViewById(R.id.spinnerOre)).getSelectedItem().toString();

            setInfoOre();

            bt_send_Ore.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Boolean change = false;
                    if(!cliente_ore.getText().toString().equals(UserIstance.getIstanceUserIstance().getClienteUser()) &&
                            !cliente_ore.getText().toString().equals("")){
                        UserIstance.getIstanceUserIstance().setClienteUser(cliente_ore.getText().toString());
                        change = true;
                    }
                    if(!responsabileInternoOre.getText().toString().equals(UserIstance.getIstanceUserIstance().getResponsabileInternoUser())){
                        UserIstance.getIstanceUserIstance().setResponsabileInternoUser(responsabileInternoOre.getText().toString());
                        change = true;
                    }
                    if(change){
                        CharSequence pswErrata= "La richiesta delle ore di permesso è stata inoltrata! ";
                        Toast.makeText(getActivity().getApplicationContext(), pswErrata, Toast.LENGTH_SHORT).show();
                    }
                }
            });
            return rootView;
        }

        private void setInfoOre() {
            String NomeCognomeUser = UserIstance.getIstanceUserIstance().getNomeUser()+" "+ UserIstance.getIstanceUserIstance().getCognomeUser();
            nome_ore.setText(NomeCognomeUser);
            if(!UserIstance.getIstanceUserIstance().getClienteUser().equals(""))
                cliente_ore.setText(UserIstance.getIstanceUserIstance().getClienteUser());
            if(!UserIstance.getIstanceUserIstance().getResponsabileInternoUser().equals(""))
                responsabileInternoOre.setText(UserIstance.getIstanceUserIstance().getResponsabileInternoUser());
        }

        private void setView() {
            img_Ore = (ImageView)rootView.findViewById(R.id.imageOre);
            nome_Dip_ore = (TextView)rootView.findViewById(R.id.Nome_Dip_ore);
            nome_ore =(TextView)rootView.findViewById(R.id.Nome_ore);
            cliente_ore =(EditText)rootView.findViewById(R.id.Cliente_ore);
            responsabileInternoOre =(EditText)rootView.findViewById(R.id.ResponsabileInternoOre);
            tipologiaRichiestaOre =(TextView)rootView.findViewById(R.id.TipologiaRichiestaOre);
            spinnerOre =(Spinner)rootView.findViewById(R.id.spinnerOre);
            giornoOre =(EditText)rootView.findViewById(R.id.GiornoOre);
            numeroOre =(EditText)rootView.findViewById(R.id.NumeroOre);
            bt_send_Ore = (Button)rootView.findViewById(R.id.bt_send_Ore);
        }

        @Override
        public void onAttach(Activity activity) {
            super.onAttach(activity);
            ((Investechblue)activity).onSectionAttached(getArguments().getInt(ARG_SECTION_NUMBER));
        }
    }

ho provato a fare il metodo setDateTimeField() in due modi:

Codice (Java): [Seleziona]
private void setDateTimeField() {
            giornoOre.setOnFocusChangeListener(new ListenerOre(getActivity()));
            Calendar newCalendar = Calendar.getInstance();
            OreDatePickerDialog = new DatePickerDialog(getActivity(), R.style.DatePickerStyle, new DatePickerDialog.OnDateSetListener() {
                //     BirthdayDatePickerDialog = new DatePickerDialog(this, new OnDateSetListener() {

                public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                    Calendar newDate = Calendar.getInstance();
                    newDate.set(year, monthOfYear, dayOfMonth);
                    giornoOre.setText(dateFormatter.format(newDate.getTime()));
                }

            },newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.WEEK_OF_MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));

            OreDatePickerDialog.setTitle("");

        }*/
Creando un Listener da passargli ma.. non sono riuscita a capire cosa scriverci...
Codice (Java): [Seleziona]
public class ListenerOre implements OnFocusChangeListener {

    //gestioneDatapicker
    private DatePickerDialog OreDatePickerDialog;
    private SimpleDateFormat dateFormatter;
    public Context c;

    public ListenerOre(Context c) {
        super();
        this.c = c;
    }

    @Override
    public void onFocusChange(View v, boolean hasFocus) {
     
    }
}
oppure come secondo metodo :
Codice (Java): [Seleziona]
private void setDateTimeField() {
            Calendar newCalendar = Calendar.getInstance();
            giornoOre.setOnFocusChangeListener((View.OnFocusChangeListener) new DatePickerDialog(getActivity(), R.style.DatePickerStyle,new DatePickerDialog.OnDateSetListener(){

                public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                    Calendar newDate = Calendar.getInstance();
                    newDate.set(year, monthOfYear, dayOfMonth);
                    giornoOre.setText(dateFormatter.format(newDate.getTime()));
                }
            }, newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.WEEK_OF_MONTH), newCalendar.get(Calendar.DAY_OF_MONTH)));
            OreDatePickerDialog.setTitle("");
        }
ma naturalmente da errore

04-30 12:45:28.405  13709-13709/com.check.investech_blue.pivetta.investech_blue E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.ClassCastException: android.app.DatePickerDialog cannot be cast to android.view.View$OnFocusChangeListener
            at com.check.investech_blue.pivetta.investech_blue.Investechblue$Fragment_ore_permesso.setDateTimeField(Investechblue.java:677)
            at com.check.investech_blue.pivetta.investech_blue.Investechblue$Fragment_ore_permesso.onCreateView(Investechblue.java:627)
            at android.support.v4.app.Fragment.performCreateView(Fragment.java:1786)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:953)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1136)
            at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739)
            at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1499)
            at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:456)
            at android.os.Handler.handleCallback(Handler.java:730)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5103)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)


non so come fare.... qualcuno ha una soluzione?

Post unito: 30 Aprile 2015, 16:20:24 CEST
la risposta è qui android - Fragment with DialogDataPicker - Stack Overflow
« Ultima modifica: 30 Aprile 2015, 16:20:25 CEST da AliceInWonderland, Reason: Merged DoublePost »
Raffaella