web-dev-qa-db-ja.com

フラグメントからコンテキストを取得する

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」コンテキスト?では、フラグメントからそのコンテキストにアクセスするにはどうすればよいですか?

ありがとうございました。

セルジ

18
Reinherd

Fragment内でgetActivity()を使用して、渡すことができるContextを取得します。 ActivityContextから継承するため、これは機能します。

別の方法として、getApplicationContext()を使用してContextを取得できます。

43
Heiko Rupp

@ heiko-ruppの回答は古く、Fragment.getContext()はAPI 23のフラグメントで導入されました。

this.getContext()のように、使用する必要があるフラグメントから渡すには

https://developer.Android.com/reference/Android/app/Fragment.html#getContext() ドキュメントによると、

このフラグメントが現在関連付けられているコンテキストを返します。

1
ishandutta2007

さて、今私は何か新しいことを知っています:

  • フラグメントをインスタンス化したクラスからコンテキストを取得する必要があります。

これは、フラグメント(「子」)のコードにこれを含めることによって行います。

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

1
Reinherd

FragmentActivityこれはアクティビティのコンテキストを提供し、それをAsyncTaskに渡すことができます。

0
Munish Katoch