Извлечь контекст из фрагмента
Я создал класс для извлечения комментариев из кодировки 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.
(под main я имею в виду, что это тот, который создает вкладки и управляет навигацией между ними.)
Это код:
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"? Так как я могу получить доступ к его контекст фрагмента?
спасибо.
Серги
4 ответов
использовать getActivity()
внутри Fragment
для получения Context
что вы можете пройти вместе. Это работает, как Activity
наследует от Context
.
в качестве альтернативы вы можете использовать getApplicationContext()
для получения Context
.
ладно, теперь я знаю, что-то новое:
- вы должны получить контекст из класса, который создал экземпляр фрагмента.
Вы делаете это в свой код во фрагменте ("ребенок").
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();
}
все это заканчивается:
ответ@heiko-rupp устарел,
Fragment.getContext()
был представлен фрагментами в API 23.
чтобы передать его из фрагмента, вы должны использовать, например this.getContext()
https://developer.android.com/reference/android/app/Fragment.html#getContext() который согласно документации просто
возвращает контекст, с которым в данный момент связан этот фрагмент.