¿Cómo funciona el alcance del uso de clases en Java?
Frecuentes
Visto 112 equipos
0
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:
EditarEventActivity.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);
LA 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 DateDialogFragmentListener
no 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:
FechaDialogFragment.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;
}
2 Respuestas
3
Pasas demasiados argumentos al newInstance(...)
método. solo pasar sYear
, sMonth
e 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
1
Asumiendo que EditEventActivity.DateDialogFragmentListener
Se extiende AddEventActivity.DateDialogFragmentListener
, su newInstance
el método toma 3 int
s después del oyente y estás pasando 6 int
s - 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 java android or haz tu propia pregunta.
¿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. ElDateDialogFragment
la clase ya espera unDateDialogFragmentListener
, sin ningún tipo de clase adicional, lo que significa que no entiendo por qué me da el error. - Andyno podemos ver cual
DateDialogFragmentListener
se usa cuando observamos su método, pero la excepción nos dice queAddEventActivity.DateDialogFragmentListener
se utiliza enDateDialogFragment
. Verifique las importaciones en esa clase o las clases en el mismo paquete. - Fabián BarneyEn 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