我們有供應了通過HTTP發佈的XML文件的Web服務。需要擊中了這個釘子...保留片段和查看onConfigurationChange
我下載和解析這個XML文件轉換爲對象來填充一對夫婦在FragmentPagerAdapter
舉行片段裏面的一些看法。我通過AsyncTask
得到這個XML文件,它通過一個監聽器接口告訴我的片段該過程已經完成。
從那裏,我填充從Web服務返回的數據片段內的視圖。這一切都很好,直到方向改變。據我瞭解,在ViewPager
的適配器是應該保留它創建的片段,這是很好的,而且我希望發生的事情,我知道片段的onCreateView
方法仍然是所謂返回視圖。我花了最後一天左右的時間來瀏覽帖子和Google文檔等,我找不到一個具體的方法讓我做我想做的事:保留片段,並且它已經填充了視圖,以便我可以只需在方向更改時將其恢復,並避免對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是不是我的主要語言,這可能看起來一團糟。任何幫助表示讚賞我越來越沮喪。
我讀過,這是對最佳實踐使我避免這樣做。手機處於橫向模式時,我也不想保留縱向視圖。我知道我想要做的事情可以做到,因爲大量的應用程序可以做到,但我試圖找到實現它的正確方法。 – Karl
那麼你很可能需要做的是把'Fragment'中包含您的'ViewPager'和'FragmentPagerAdapter'以及數據支持的適配器將MainActivity佈局。 ... outState.putString(key,string);在頂層Fragment的'onSaveInstanceState()'中,保存數據//等等,以便支持您的視圖 ... 然後在頂層片段的onCreateView(): ... 如果(!savedInstanceState = NULL){// 通過重新創建你的適配器,通過改變所選擇的頁面恢復狀態,將數據放入片段等 } – sddamico
這對我來說很好,謝謝。 – Karl