J'ai créé une classe pour récupérer les commentaires d'un codage JSON à partir d'un fichier PHP. Cette classe, qui s'étend de 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);
}
}
Comme vous pouvez le constater, j'essaie de montrer un ProgressDialog pendant que le processus "doInBackground" fonctionne. Mais progressDialog, constructeur, demande un contexte et je ne sais pas comment le fournir.
J'appelle cette classe depuis un fragment, je ne peux donc pas accéder au contexte de la manière suivante:
pDialog = new ProgressDialog(MyFragmentA.context);
L'activité "principale" est appelée: AndroidViewPagerActivity qui étend FragmentActivity.
(En gros, je veux dire que c'est celui qui crée les onglets et gère la navigation entre eux.)
C'est son code:
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));
}
}
Comment puis-je accéder au contexte? Quel contexte dois-je utiliser? Contexte "AndroidViewPagerActivity"? Alors, comment puis-je accéder à son contexte à partir d'un fragment?
Je vous remercie.
Sergi
Utilisez getActivity()
dans la Fragment
pour obtenir une Context
que vous pouvez transmettre. Cela fonctionne, car Activity
hérite de Context
.
Vous pouvez également utiliser getApplicationContext()
pour obtenir Context
.
La réponse de @ heiko-rupp est obsolète, Fragment.getContext()
a été introduit dans Fragments in API 23.
Pour le faire partir d'un fragment, vous devez utiliser, comme this.getContext()
https://developer.Android.com/reference/Android/app/Fragment.html#getContext () qui, selon les documentations,
Renvoie le contexte auquel ce fragment est actuellement associé.
Ok, maintenant je sais quelque chose de nouveau:
Pour ce faire, vous l'incluez dans votre code dans le fragment ("l'enfant").
Context cont;
cont=getActivity();
Donc, une fois le contexte défini, vous le transmettez. Dans mon cas, je devais lui passer une classe AsyncTask pour pouvoir afficher une boîte de dialogue.
new RecuperarComentarisFoto(cont).execute();
Et pour finir, dans la classe "RecuperarComentarisFoto", j'ai créé un constructeur. Comme je l'ai lu, c'est bon de le faire de cette façon.
private Context mContext;
public RecuperarComentarisFoto(Context context){
this.mContext=context;
}
Et la magie:
@Override
protected void onPreExecute() {
super.onPreExecute();
ProgressDialog pDialog = new ProgressDialog(this.mContext);
pDialog.setMessage("Creating Product..");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
Tout cela se termine par:
FragmentActivity cela vous donnera un contexte d’activité et vous pourrez ensuite le transmettre à votre AsyncTask.