¿Cómo funciona el alcance del uso de clases en Java?

No estoy muy seguro de cómo formular esta pregunta, así que hice lo mejor que pude en ese aspecto. Así que tengo un problema con la creación de un DatePicker en mi Actividad. Este es el código que me está dando error:

EditEventActivity.java

DateDialogFragment frag = DateDialogFragment.newInstance(this, new 
DateDialogFragmentListener() {

            @Override
            public void updateChangeDate(int year, int month, int day) {
                // TODO Auto-generated method stub

            }
        }, sYear, sMonth, sDay);

El newInstance() método que tengo allí es lo que me está dando el error. El error es este:

The method newInstance(Context, AddEventActivity.DateDialogFragmentListener, int, int,
int) in the type DateDialogFragment is not applicable for the arguments 
(EditEventActivity, new EditEventActivity.DateDialogFragmentListener(){}, int, int, 
int)

Ahora la DateDialogFragment se encuentra en su propio archivo. No creo que sea necesario publicar eso. Es lo que es. Pero mi interfaz está en AddEventActivity.java. Ahora esto es lo que estoy confundido. Mi método estático, newInstance() de DateDialogFragment toma DateDialogFragmentListenerno AddEventActivity.DateDialogFragmentListener. Así que supongo que ese es el problema. Pero, de nuevo, no estoy seguro, que es lo que necesito ayuda para entender. Gracias de antemano.

Realmente. También creo que también podría incluir el newInstance() método:

DateDialogFragment.java

public static DateDialogFragment newInstance(Context context, DateDialogFragmentListener 
listener, int year, int month, int day) {
    DateDialogFragment dialog = new DateDialogFragment();
    mContext = context;
    mListener = listener;
    mYear = year;
    mMonth = month;
    mDay = day;
    Bundle args = new Bundle();
    args.putString("title", "Set Date");
    dialog.setArguments(args);
    return dialog;
}

preguntado el 01 de julio de 12 a las 22:07

2 Respuestas

Pasas demasiados argumentos al newInstance(...) método. solo pasar sYear, sMonth y sDay una vez en lugar de dos.

Editar Aquí tienes dos clases con el mismo nombre simple, pero son clases diferentes y, por lo tanto, tipos diferentes. Simplemente pase una instancia de la clase correcta.

DateDialogFragment frag = DateDialogFragment.newInstance(
    this, 
    new AddEventActivity.DateDialogFragmentListener() {

        @Override
        public void updateChangeDate(int year, int month, int day) {
            // TODO Auto-generated method stub

        }
    }, sYear, sMonth, sDay);

.. o corregir la firma de su newInstance() método si necesita pasar un EditEventActivity.DateDialogFragmentListener.

Respondido 01 Jul 12, 22:07

¿Cuál es su excepción ahora? La excepción dada sigue siendo la que muestra exactamente este caso en el que pasa demasiados argumentos. - Fabián Barney

Acabo de editarlo. Lo mismo menos las tres entradas adicionales. Lo siento, lo agregó automáticamente y no debo haberlo notado. - Andy

Pensé en hacerlo. Pero estoy reutilizando el DateDialogFragment clase. Así que cambiar el tipo allí no funcionaría. Pero la primera parte que dijiste tiene sentido. Pero estoy confundido sobre cómo pasar una instancia de la clase correcta. El DateDialogFragment la clase ya espera un DateDialogFragmentListener, sin ningún tipo de clase adicional, lo que significa que no entiendo por qué me da el error. - Andy

no podemos ver cual DateDialogFragmentListener se usa cuando observamos su método, pero la excepción nos dice que AddEventActivity.DateDialogFragmentListener se utiliza en DateDialogFragment. Verifique las importaciones en esa clase o las clases en el mismo paquete. - Fabián Barney

En realidad creo que tienes razón. Lo importé, pero como tengo la interfaz interna dentro del AddEventActivity. Moveré la interfaz para ver si eso soluciona el problema. ¡Agradezco la ayuda y el tiempo que me acabas de dar! - Andy

Asumiendo que EditEventActivity.DateDialogFragmentListener Se extiende AddEventActivity.DateDialogFragmentListener, Su newInstance el método toma 3 ints después del oyente y estás pasando 6 ints - probablemente quisiste decir:

DateDialogFragment frag = DateDialogFragment.newInstance(this, new DateDialogFragmentListener() {

        @Override
        public void updateChangeDate(int year, int month, int day) {
            // TODO Auto-generated method stub

        }
    }, sYear, sMonth, sDay); //removed the last 3 arguments

EDITAR
Después de su edición, volvamos a mi primer comentario: hace EditEventActivity.DateDialogFragmentListener ampliar AddEventActivity.DateDialogFragmentListener?

Respondido 01 Jul 12, 22:07

Gracias por mencionarlo. Acabo de arreglarlo. Eso no debería haber estado allí. Se agregó automáticamente cuando presioné enter y se llenó solo. Pero el error es el mismo menos los tres extra erróneos ints - Andy

No, no lo hace. Es solo una interfaz de clase interna. - Andy

bueno, tu método espera un AddEventActivity.DateDialogFragmentListener ¡así que si pasa un objeto no relacionado, no será feliz! - Assylias

¡Jaja lo sé! Pero como puedes ver arriba en mi newInstance método, ¡espera lo que estoy diciendo! Eso es lo que me confunde. Realmente no entiendo por qué sucede eso. Y como pueden ver si lo envié desde EditEventActivity, también es el tipo correcto - Andy

Debe verificar sus importaciones y asegurarse de que todos los objetos sean de la misma clase o al menos compatibles. - Assylias

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.