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);
「メイン」アクティビティは次のように呼ばれます:FragmentActivityを拡張するAndroidViewPagerActivity。
(主に、それはタブを作成し、タブ間のナビゲーションを管理することです。)
これはコードです:
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」コンテキスト?では、フラグメントからそのコンテキストにアクセスするにはどうすればよいですか?
ありがとうございました。
セルジ
Fragment
内でgetActivity()
を使用して、渡すことができるContext
を取得します。 Activity
はContext
から継承するため、これは機能します。
別の方法として、getApplicationContext()
を使用してContext
を取得できます。
@ heiko-ruppの回答は古く、Fragment.getContext()
はAPI 23のフラグメントで導入されました。
this.getContext()
のように、使用する必要があるフラグメントから渡すには
https://developer.Android.com/reference/Android/app/Fragment.html#getContext() ドキュメントによると、
このフラグメントが現在関連付けられているコンテキストを返します。
さて、今私は何か新しいことを知っています:
これは、フラグメント(「子」)のコードにこれを含めることによって行います。
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();
}
これはすべて次で終わります:
FragmentActivityこれはアクティビティのコンテキストを提供し、それをAsyncTaskに渡すことができます。