Saltar al contenido

Obtener actividad del contexto en Android

Solución:

De tu Activity, solo pasa this como el Context para su diseño:

ProfileView pv = new ProfileView(this, null, temp, tempPd);

Luego tendrás un Context en el diseño, pero sabrá que en realidad es su Activity y puedes lanzarlo para que tengas lo que necesitas:

Activity activity = (Activity) context;

Esto es algo que he usado con éxito para convertir. Context para Activity cuando se opera dentro de la interfaz de usuario en fragmentos o vistas personalizadas. Descomprimirá ContextWrapper de forma recursiva o devolverá un valor nulo si falla.

public Activity getActivity(Context context)
{
    if (context == null)
    {
        return null;
    }
    else if (context instanceof ContextWrapper)
    {
        if (context instanceof Activity)
        {
            return (Activity) context;
        }
        else
        {
            return getActivity(((ContextWrapper) context).getBaseContext());
        }
    }

    return null;
}

  1. No
  2. No puedes

Hay dos contextos diferentes en Android. Uno para su aplicación (llamémoslo GRANDE) y uno para cada vista (llamémoslo contexto de actividad).

Un linearLayout es una vista, por lo que debe llamar al contexto de la actividad. Para llamarlo desde una actividad, simplemente llame a “esto”. Tan fácil, ¿no es así?

Cuando usas

this.getApplicationContext();

Llamas al contexto GRANDE, el que describe tu aplicación y no puede administrar tu vista.

Un gran problema con Android es que un contexto no puede llamar a su actividad. Eso es un gran problema para evitar esto cuando alguien comienza con el desarrollo de Android. Tienes que encontrar una mejor manera de codificar tu clase (o reemplazar “Contexto de contexto” por “Actividad de actividad” y convertirlo en “Contexto” cuando sea necesario).

Saludos.


Solo para actualizar mi respuesta. La forma más fácil de obtener su Activity context es definir un static instancia en tu Activity. Por ejemplo

public class DummyActivity extends Activity
{
    public static DummyActivity instance = null;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        // Do some operations here
    }

    @Override
    public void onResume()
    {
        super.onResume();
        instance = this;
    }

    @Override
    public void onPause()
    {
        super.onPause();
        instance = null;
    }
}

Y luego, en tu Task, Dialog, View, podría usar ese tipo de código para obtener su Activity context:

if (DummyActivity.instance != null)
{
    // Do your operations with DummyActivity.instance
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *