Извлечь контекст из фрагмента

Я создал класс для извлечения комментариев из кодировки 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();
}

все это заканчивается: enter image description here


ответ@heiko-rupp устарел, Fragment.getContext() был представлен фрагментами в API 23.

чтобы передать его из фрагмента, вы должны использовать, например this.getContext()

https://developer.android.com/reference/android/app/Fragment.html#getContext() который согласно документации просто

возвращает контекст, с которым в данный момент связан этот фрагмент.


FragmentActivity это даст вам контекст активности, а затем вы можете передать его в свою AsyncTask.