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;
}
- No
- 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
}