java - Recuperar contexto de un fragmento
android android-fragments (4)
Creé una clase para recuperar comentarios de una codificación JSON desde un archivo PHP. Esta clase, se extiende desde AsyncTask:
public class RecuperarComentarisFoto extends AsyncTask<String, String, String>{
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(????);
pDialog.setMessage("Creating Product..");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
@Override
protected String doInBackground(String... arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
}
}
Como puede ver, estoy tratando de mostrar un ProgressDialog mientras el proceso "doInBackground" está funcionando. Pero el constructor progressDialog, solicita un Contexto y no sé cómo proporcionarlo.
Estoy llamando a esta clase desde un Fragmento, por lo que no puedo acceder al contexto de esta manera:
pDialog = new ProgressDialog(MyFragmentA.context);
La actividad "principal" se llama: AndroidViewPagerActivity que extiende FragmentActivity.
(En general, quiero decir que es el que crea las pestañas y administra la navegación entre ellas).
Este es su código:
public class AndroidViewPagerActivity extends FragmentActivity {
ViewPager mViewPager;
TabsAdapter mTabsAdapter;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mViewPager = new ViewPager(this);
mViewPager.setId(R.id.pager);
setContentView(mViewPager);
final ActionBar bar = getActionBar();
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_HOME);
bar.hide();
mTabsAdapter = new TabsAdapter(this, mViewPager);
mTabsAdapter.addTab(bar.newTab().setText("Fragment A"), MyFragmentA.class, null);
if (savedInstanceState != null) {
bar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0));
}
}
¿Cómo puedo acceder al contexto? ¿Qué contexto debo usar? "AndroidViewPagerActivity" contexto? Entonces, ¿cómo puedo acceder a su contexto desde un fragmento?
Gracias.
Sergi
De acuerdo, ahora sé algo nuevo:
- Debes obtener el contexto de la clase que instancia el fragmento.
Para hacer esto, incluya esto en su código en el fragmento ("el niño").
Context cont;
cont=getActivity();
Entonces, una vez que tienes el contexto, lo pasas. En mi caso, tuve que pasarle una clase AsyncTask, así que puedo mostrar un diálogo.
new RecuperarComentarisFoto(cont).execute();
Y para terminar, en la clase "RecuperarComentarisFoto", creé un constructor. Como he leído, está bien hacerlo de esta manera.
private Context mContext;
public RecuperarComentarisFoto(Context context){
this.mContext=context;
}
Y la magia:
@Override
protected void onPreExecute() {
super.onPreExecute();
ProgressDialog pDialog = new ProgressDialog(this.mContext);
pDialog.setMessage("Creating Product..");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
Todo esto termina con:
FragmentActivity esto te dará contexto de actividad y luego puedes pasarlo a tu AsyncTask.
Use getActivity()
dentro del Fragment
para obtener un Context
que pueda pasar. Eso funciona, ya que Activity
hereda de Context
.
Como alternativa, puede usar getApplicationContext()
para obtener el Context
.
La respuesta de @heiko-rupp está desactualizada, Fragment.getContext()
se ha introducido en Fragmentos en API 23.
Para pasarlo de fragmento a usar, como this.getContext()
https://developer.android.com/reference/android/app/Fragment.html#getContext () que según la documentación solo
Devuelve el contexto al que este fragmento está asociado actualmente.