从片段中检索上下文

Rei*_*erd 18 java android android-context android-asynctask android-fragments

我创建了一个类来从PHP文件中检索JSON编码的注释.这个类从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);
    }

}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我正试图在"doInBackground"进程工作时显示ProgressDialog.但progressDialog构造函数,请求一个Context,我不知道如何提供它.

我从Fragment调用这个类,所以我不能像这样访问上下文:

pDialog = new ProgressDialog(MyFragmentA.context);
Run Code Online (Sandbox Code Playgroud)

称为"主要"活动: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));
    }

}
Run Code Online (Sandbox Code Playgroud)

我如何访问上下文?我应该使用哪种上下文?"AndroidViewPagerActivity"上下文?那么如何从片段中访问其上下文?

谢谢.

塞尔吉

Hei*_*upp 44

getActivity()在里面使用Fragment获得Context你可以传递的.这是有效的,Activity继承自Context.

作为替代,你可以getApplicationContext()用来获得Context.

  • 在大规模使用某些设备时,在片段内调用getActivity()可能会导致NullPointerException.在片段附加到活动之前进行调用时会发生这种情况.它还会导致内存泄漏,这可能是致命的,很难找到.通过这个来获得更好的理解.https://android-developers.googleblog.com/2009/01/avoiding-memory-leaks.html (2认同)