java android android-fragments android-asynctask android-context

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 .