Mi DialogFragment clase se invoca cuando se presiona un botón en una actividad. Quiero que la fecha establecida a través de este DialogFragment para ser mostrado en los botones de texto.
FindViewById se niega a ser reconocido por la clase.

He encontrado una pregunta similar pero soy incapaz de relacionarse a mi caso.

Código:

  1. Botón que llama al Diálogo fragmento:

    public void datepicker(View v) {
        DialogFragment newFragment = new DatePickerFragment();
        newFragment.show(getFragmentManager(), "datePicker"); 
    }
  2. Código para el diálogo fragmento:

    public class DatePickerFragment extends DialogFragment implements
        DatePickerDialog.OnDateSetListener {
    
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceSateate) {
    
            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);
    
                return new DatePickerDialog(getActivity(), this, year, month, day);
            }
    
            public void onDateSet(DatePicker view, int year, int month, int day) {
                //Do something with the date chosen
            }
        }
    }
  • Puedes mostrar el código para saber cómo sus diferentes?
  • añadido!
  • Tengo que renunciar a la edición de la misma.
  • Su fino ahora. Soy yo el único que pasa por el infierno cuando publiques código en stackoverflow??
  • no, es sólo la de @api de notación, que se mete hasta el formato de código de
  • Ohkay! De todos modos, @A–C la respuesta que funciona para mí.

InformationsquelleAutor krtkush | 2012-12-24

4 Comentarios

  1. 10

    En el método en su DialogFragment que es el encargado de recibir la notificación cuando el usuario ajusta la fecha, ello

    Button activityButton = (Button)getActivity().findViewById(R.id.myButton);
    activityButton.setText (myDate);
    • Wow! Que lo hizo! Pero cómo?? ¿Cómo findViewById trabajo?
    • He utilizado getActivity() que tiene un público findViewById()método. Usted necesita getActivity() desde el botón que se está modificando es parte de su Actividad de diseño, no de sus fragmentos.
    • Aha! Muchas gracias.
    • Esto no es para el de-couping entre DialogFragment y de la Actividad. ¿Qué ocurre si el DialogFragment organizado por una actividad que no tiene botón con id es myButton?
    • Si la Actividad no tiene el botón con este id, un NullPointerException se produce cuando intenta utilizar activityButton. Para que un Fragmento conectado a múltiples Actividades, es más fácil hacer un Detector de tipo de interfaz.
  2. 2

    Crear la Clase para DatePicker Fragmento:

        public class SelectDateFragment extends DialogFragment implements
                                         DatePickerDialog.OnDateSetListener {
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
    
                Calendar now = Calendar.getInstance();
                year = now.get(Calendar.YEAR);
                month = now.get(Calendar.MONTH);
                day = now.get(Calendar.DATE);
    
             return new DatePickerDialog(getActivity(), this, year, month, day);
        }
    
        public void onDateSet(DatePicker view, int year, int month, int day) {
            orderDateEditText.setText(year + "-" + (month + 1) + "-" + day);
        }
    }

    Llamar a este Fragmento Cuando se hace clic En ImageButton:

        /** Create DatePicker dialog on click of OrderDateEditText **/
       orderDatePickerButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                //TODO Auto-generated method stub
                DialogFragment newFragment = new SelectDateFragment();
                newFragment.show(getFragmentManager(), "DatePicker");
            }
        });

    En Mes hay más de 1, ya selector de fecha por defecto toma el mes de 0 a 11 de Ene a Dic.

    Gracias..

  3. 1

    aquí una buena pauta a seguir:

    1. crear un detector de interfaz en el cuadro de diálogo para controlar la correspondiente al pulsar un botón en el cuadro de diálogo
    2. implementar en el inicio de la actividad
    3. cuando el usuario presiona «aceptar» o «cancelar», llame a la escucha de los métodos de
    4. hacer lo que necesite hacer en la impl del oyente a la actualización de la actividad de la vista

    algo como,

    class MyDialogFragment extends DialogFragment implements DialogInterface.OnClickListener {
      static interface Listener {
        void onOkay(MyObject result);
        void onCancel();
      }
      ...
    
      @Override
      public Dialog onCreateDialog(Bundle savedInstanceState) {
        ...
    
        //set this as a listener for ok /cancel buttons
        return new AlertDialog.Builder(activity)...whatever...
            .setPositiveButton(R.string.ok, this)
            .setNegativeButton(R.string.cancel, this).create();
      }
    
      @Override
      public void onClick(DialogInterface dialog, int which) {
          if (which == DialogInterface.BUTTON_POSITIVE) {
              if (getActivity() instanceof Listener) {
                  ((Listener)getActivity()).onOkay(...);
              }
          } else {
              if (getActivity() instanceof Listener) {
                  ((Listener)getActivity()).onCancel();
              }
          }
      }
    }
    
    class MyActivity extends Activity implements MyDialogFragment.Listener {
      ...
      @Override
      public void onOkay(MyObject result) {
        //update activity view here with result
      }
    
      @Override
      public void onCancel() {
        //anything?
      }
    }

    si su caso, el «resultado» pasó a la onOkay() método sería la Fecha de objetos seleccionados por el usuario en el cuadro de diálogo.

  4. 0

    Un Fragment no es un View. Si usted quiere encontrar un fragmento de uso findFragmentById de la FragmentManager.

Dejar respuesta

Please enter your comment!
Please enter your name here