簡體   English   中英

Android:在選項卡式應用程序中以片段形式保留listview內容的最佳方法?

[英]Android: Best way to retain listview content in fragment in tabbed app?

首先,這是我關於StackOverflow的第一個問題,因此請原諒任何格式問題。

我正在編寫一個Android平板電腦應用程序,該應用程序允許用戶使用從Web服務提取的內容填充ListView。 在此刻,有一個活動包含一個ViewPager,該ViewPager在不同頁面上包含6個片段。

問題是,當用戶再次切換到另一個選項卡/上一步,並且調用了Fragment的OnCreateView方法(將ListView初始化為空)時,下載並添加到ListView的數據消失了。

除了將列表視圖的內容存儲在數據庫/ sharedprefs中之外,什么是保留列表視圖的內容的最佳方法是什么。 當用戶注銷/重新啟動應用程序時,列表視圖中的數據需要銷毀,因此我希望不要以任何方式保留它。

ListView容器片段的OnCreateView:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle     savedInstanceState) {
    rootView = inflater.inflate(R.layout.fragment_certificate_list, container, false);
    return rootView;
}

這是當用戶點擊下載按鈕時填充ListView的代碼:

ListView lv = (ListView) callerActivity.findViewById(R.id.listView1);
lv.setAdapter(new CertListAdapter(callerActivity.getBaseContext(), activeCerts));
if (activeCerts.size() > 0) {
       ((TextView) callerActivity.findViewById(R.id.certStatusLabel)).setVisibility(View.GONE);
} else {
        ((TextView) callerActivity.findViewById(R.id.certStatusLabel)).setText(callerActivity.getString(R.string.certsDontExist));
}

activeCerts變量是從Web服務獲得的證書對象的數組列表。

編輯

找到了解決方案,只需檢查onCreateView方法中“ activeCerts”變量是否為null,如果不為null則再次填充ListView。 當用戶注銷時,我只是將activeCerts設置為null。

干杯

“正確”的方式:

使用Fragment.onSaveInstanceState(Bundle)Fragment.onActivityCreated(Bundle)保存和還原項目

便宜的方式:

在托管片段的活動上設置android:configChanges="orientation|keyboardHidden|screenSize"

您也可以setRetainInstance(true); 在片段的onCreate()

在這里閱讀更多關於這一切的信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM