从片段中检索上下文

我创build了一个类来从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); } } 

正如你所看到的,我试图在“doInBackground”进程正在工作时显示一个ProgressDialog。 但progressDialog构造函数,要求一个上下文,我不知道如何提供它。

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

 pDialog = new ProgressDialog(MyFragmentA.context); 

被称为“main”的活动被称为:扩展FragmentActivity的AndroidViewPagerActivity。

(主,我的意思是这是创build标签,并pipe理他们之间的导航。

这是它的代码:

 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”上下文? 那么我怎样才能从一个片段访问它的上下文呢?

谢谢。

塞尔吉

Solutions Collecting From Web of "从片段中检索上下文"

Fragment使用getActivity()来获得一个你可以传递的Context 。 这起作用,因为ActivityContextinheritance。

作为替代,您可以使用getApplicationContext()来获取Context

好吧,现在我知道一些新的东西:

  • 您必须从实例化片段的类中获取上下文。

你可以通过在你的代码片段(“孩子”)中包含这个。

 Context cont; cont=getActivity(); 

那么,一旦你有了上下文,就通过了。 在我的情况下,我不得不通过它一个AsyncTask类,所以我可以显示一个对话框。

 new RecuperarComentarisFoto(cont).execute(); 

为了完成这个,在“RecuperarComentarisFoto”类中,我创build了一个构造函数。 正如我读过的,可以这样做。

 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中的Fragments中引入。

要从片段中传递它,就像this.getContext()

https://developer.android.com/reference/android/app/Fragment.html#getContext()根据文档只&#x662F;

返回这个片段当前关联的上下文。

FragmentActivity这将给你的活动的上下文,然后你可以传递给你的AsyncTask。