Llamar a un método no estático fuera de la clase
A menudo tengo que lidiar con este tipo de error al programar en Java en Android. Por ejemplo tengo una clase donde pongo una bandera.
public class ViewActivity extends Activity { ... @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); ... }
En otra clase quiero restablecer el FLAG_KEEP_SCREEN_ON
- Llamar a un objeto java guardado a través de JNI desde un hilo diferente
- ¿Cómo agregar desplazamiento a la vista cuando se cambia la orientación de la pantalla a paisaje?
- Genymotion se comunica con socket en diferentes subredes locales
- MissingResourceException: No se puede encontrar el paquete para el nombre base sun.util.logging.resources.logging, locale en_US
- Desplazarse a Cadena específica en el elemento de vista de lista personalizada
class DrawOnTop extends View { ... if (condition) { getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); }
pero esto no funciona, ya que tengo "El método getWindow no está definido para el tipo DrawOnTop".
Así que intento definir un método clearFlags en la clase ViewActivity
void clearFlags() { getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); }
y para llamar desde la clase DrawOnTop:
if (condition) { ViewActivity.clearFlags(); }
Esto no trabaja tan bien: Consigo "no puede hacer una referencia estática al método no estático clearFlags () del tipo ViewActivity". Bueno, hagámoslo estático entonces.
static void clearFlags() { getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); }
y luego obtengo "No se puede hacer una referencia estática al método no estático getWindow del tipo Actividad"
¿Cómo podría ejecutar tal declaración?
- Archivo de serialización en Android
- Osmdroid - mayor nivel de zoom?
- Adición de signo% a las etiquetas del eje Y en el gráfico de barras AChartEngine
- Convierta el UTC a la hora local actual
- ¿Cómo descomprimir archivos zip AES-256 encriptados?
- Smack lanza "NoClassDefFoundError: Resolución fallida de: Lorg / jxmpp / util / XmppStringUtils"
- Android - Cómo permitir sólo un cierto número de lugares decimales
- Emulador de Android: Error de instalación: INSTALL_FAILED_VERSION_DOWNGRADE
Si su clase DrawOnTop está anidada dentro de ViewActivity puede crear una variable de Context local y usarla para llamar a getWindow (). Si ese no es el caso entonces cree un receptor en su clase de actividad entonces de DawOnTop envíe una intención con su disparador para hacer lo que el trabajo es. No instanciar su clase de actividad, mala idea!
Puede enviar getWindow()
como parámetro al método clearFlags
. Llame a clearFlags(Window window)
de su actividad: WindowHelper.getInstance().clearFlags(getWindow());
Clase de ayuda:
public class WindowHelper { public static final WindowHelper instance = new WindowHelper(); public static WindowHelper getInstance() { return instance; } public void clearFlags(Window window) { window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } }
He intentado implementar las soluciones sugeridas por Aksaçlı y esto resultó ser muy simple:
En la clase ViewActivity DrawonTop se llama de esta manera: mDrawOnTop = new DrawOnTop(this);
El constructor de la segunda clase contiene lo siguiente:
public DrawOnTop(Context context) { super(context);
Por ViewActivity.clearFlags();
tanto ViewActivity.clearFlags();
tiene simplemente que ser reescrito como ((ViewActivity)getContext()).clearFlags();
Tal vez debería referirse a un objeto inicializado en su método estático. Así que en lugar de:
void clearFlags() { getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); }
debe crear una variable de instancia estática de su ventana:
private static staticWindowInstance; void clearFlags() { getStaticWindowInstance().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); }
Para obtener más información, debe consultar el patrón de diseño Singleton .
- Utilice Video chat en segundo plano como Skype usando WebRTC en Android
- SQLiteOpenHelper: la forma más rápida de ejecutar ~ 20k instrucciones?