HTTP Post 経由で XML ファイルを提供する Web サービスがあります。
この xml ファイルをダウンロードしてオブジェクトに解析し、FragmentPagerAdapter
. を介してこの XML ファイルを取得AsyncTask
し、リスナー インターフェイスを介してプロセスが終了したことをフラグメントに通知します。
そこから、フラグメント内のビューに Web サービスから返されたデータを入力します。向きが変わるまではこれで問題ありません。私が理解していることから、ViewPager
のアダプターは、作成したフラグメントを保持することになってonCreateView
います。ここでの投稿やGoogleドキュメントなどを探して最後の1日ほどを費やしましたが、やりたいことを実行できる具体的な方法が見つかりません。フラグメントを保持し、すでにビューが読み込まれているので、方向が変わったときに元に戻すだけで、Web サービスへの不要な呼び出しを回避できます。
いくつかのコード スニペット:
主な活動onCreate
:
mViewPager = (ViewPager) findViewById(R.id.viewpager);
if (mViewPager != null) {
mViewPager.setAdapter(new PagerAdapter(getSupportFragmentManager()));
}
if (savedInstanceState == null) {
if (CheckCredentials()) {
Refresh(0,0);
} else {
ShowCredentialsDialog(false);
}
}
メイン アクティビティのメソッドを更新...
public void Refresh(Integer month, Integer year) {
if (mUpdater == null) {
mUpdater = new UsageUpdater(this);
// mUpdater.setDataListener(this);
}
if (isConnected()) {
mUpdater.Refresh(month, year);
usingCache = false;
mProgress.show();
} else {
mUpdater.RefreshFromCache();
usingCache = true;
}
}
これは問題のフラグメント全体であり、テキストビューなどでテキストの設定を表示することは重要ではないため、UI に入力するコードの一部を除いたものです...
public class SummaryFragment extends Fragment implements Listeners.GetDataListener {
private static final String KEY_UPDATER = "usageupdater";
private UsageUpdater mUpdater;
private Context ctx;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
this.ctx = activity;
}
private View findViewById(int id) {
return ((Activity)ctx).findViewById(id);
}
public void onGetData() {
// AsyncTask interface method, will be called from onPostExecute.
// Populate view from here
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View view = inflater.inflate(R.layout.fragment_usagesummary, container, false);
mUpdater = (UsageUpdater) getArguments().getSerializable(KEY_UPDATER);
mUpdater.setDataListener(this);
return view;
}
}
この「問題」のいずれかを理解している場合、空onCreateView
のビューを返していますが、フラグメントを保持する方法がわかりません。データが事前に入力されたビューを返し、メインアクティビティからのすべての Web サービス呼び出しを管理します。
わからない場合は、Android は私にとって主要な言語ではなく、これはおそらく修羅場のように見えます。どんな助けでも大歓迎です私はかなりイライラしています。