Извлечение контекста из фрагмента
Я создал класс для извлечения комментариев из JSON-кодировки из файла PHP. Этот класс, простирается от 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);
}
}
Как вы можете видеть, я пытаюсь показать ProgressDialog, пока работает "doInBackground". Но progressDialog конструктор, запрашивает контекст, и я не знаю, как его обеспечить.
Я вызываю этот класс из фрагмента, поэтому я не могу получить доступ к контексту, подобному этому:
pDialog = new ProgressDialog(MyFragmentA.context);
"Основная" активность называется: AndroidViewPagerActivity, которая расширяет FragmentActivity.
(В основном я имею в виду, что это тот, который создает вкладки и управляет навигацией между ними.)
Это код:
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));
}
}
Как я могу получить доступ к контексту? Какой контекст я должен использовать? Контекст AndroidViewPagerActivity? Итак, как я могу получить доступ к его контексту из фрагмента?
Спасибо.
Серхи
Ответы
Ответ 1
Используйте getActivity()
внутри Fragment
, чтобы получить Context
, который вы можете передать. Это работает, поскольку Activity
наследует от Context
.
В качестве альтернативы вы можете использовать getApplicationContext()
для получения Context
.
Ответ 2
Хорошо, теперь я знаю что-то новое:
- Вы должны получить контекст из класса, который создавал фрагмент.
Вы делаете это, включив это в свой код в фрагменте ( "ребенок" ).
Context cont;
cont=getActivity();
Итак, как только у вас есть контекст, вы его передаете. В моем случае я должен был передать ему класс AsyncTask, поэтому я могу показать диалог.
new RecuperarComentarisFoto(cont).execute();
И чтобы закончить это, в классе "RecuperarComentarisFoto" я создал конструктор. Как я читал, все в порядке.
private Context mContext;
public RecuperarComentarisFoto(Context context){
this.mContext=context;
}
И волшебство:
@Override
protected void onPreExecute() {
super.onPreExecute();
ProgressDialog pDialog = new ProgressDialog(this.mContext);
pDialog.setMessage("Creating Product..");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
Все это заканчивается:
![enter image description here]()
Ответ 3
@Ответ heiko-rupp устарел,
Fragment.getContext()
был введен во Фрагменты в API 23.
Чтобы передать его из фрагмента, который вы должны использовать, например this.getContext()
https://developer.android.com/reference/android/app/Fragment.html#getContext(), который в соответствии с документацией просто
Вернуть контекст, с которым этот фрагмент связан в настоящее время.
Ответ 4
FragmentActivity это даст вам контекст активности, а затем вы можете передать его в свою AsyncTask.