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


Answers

Хорошо, теперь я знаю что-то новое:

  • Вы должны получить контекст из класса, создавшего фрагмент.

Вы делаете это, включив это в свой код в фрагмент («ребенок»).

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();
}

Все это заканчивается:

Question

Я создал класс для извлечения комментариев из 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? Итак, как я могу получить доступ к его контексту из фрагмента?

Спасибо.

Sergi




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




Links