20

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 コンストラクターは Context を要求しますが、それを提供する方法がわかりません。

Fragment からこのクラスを呼び出しているため、次のようなコンテキストにアクセスできません。

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

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

セルジ

4

5 に答える 5

49

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

代わりに、 を使用getApplicationContext()して を取得できますContext

于 2013-01-04T17:30:39.827 に答える
1

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

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

これを行うには、フラグメント(「子」)のコードにこれを含めます。

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

これはすべて次で終わります: ここに画像の説明を入力してください

于 2013-01-04T18:21:31.020 に答える
0

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

于 2013-01-04T17:37:44.480 に答える