我是Android新手(這是我的第一個應用程序),我在Activity
中製作了GridView
,我希望它根據屏幕位置進行響應(風景素描)。當然,我爲肖像以及風景做了GridView
行寬的一些自定義佈局值,並且它非常完美。 除此之外,在每個屏幕方向更改時,GridView
將再次重新加載。這對用戶體驗不利。我只喜歡GridView
(絕對是它的行)來調整到新的屏幕寬度,而不用做所有的onCreate()
指令(檢索GridView
的數據來自互聯網,分配HashMap
對象中的退出數據,設置GridView
的Adapter
,然後顯示GridView
的行)。 我經歷了許多論壇主題和一些Google文檔,討論了恢復簡單值的問題,但從來沒有找到答案來恢復GridView
而無需重新加載。 我讀了onSaveInstanceState()
和onRestoreInstanceState()
,但我不知道如何在我的情況下使用它們(GridView
的情況)。在屏幕方向更改(無需重新加載)後恢復Android GridView
任何人都可以提供一個簡單的代碼示例嗎?或者至少有一些標題要遵循?
這裏有一些什麼我想在我的代碼,在Activity
類:
private Parcelable mListInstanceState;
private Parcelable mAdapterInstanceState;
private GridView gridView = null;
private MyAdapter myAdapter = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gridView = (GridView) findViewById(R.id.gridview);
// Check whether we're recreating a previously destroyed instance
if(savedInstanceState != null) {
// Restore value of members from saved state
mListInstanceState = savedInstanceState.getParcelable("gridview");
mAdapterInstanceState = savedInstanceState.getParcelable("adapter");
}
else {
// Retrieve data from internet, fill HashMap object,
// set Adapter and display GridView only for the first time the activity is created
attemptToDisplayGirdViewItems();
}
}
@Override
protected void onSaveInstanceState(Bundle state) {
// Save activity state
super.onSaveInstanceState(state);
state.putParcelable("gridview", gridView.onSaveInstanceState());
// state.putParcelable("adapter", myAdapter);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
// Retrieve and restore activity state
// Restore state members from saved instance
mListInstanceState = savedInstanceState.getParcelable("gridview");
mAdapterInstanceState = savedInstanceState.getParcelable("adapter");
super.onRestoreInstanceState(savedInstanceState);
}
你倒是應該保存數據(來自互聯網)只有... FX使用或者廢棄的'Activity.getLastNonConfigurationInstance()'或與非用戶界面的可保留片段...所有其他的東西應該在那裏... GridView是保存在'onSaveInstanceState'當前項目的位置,所以你應該打擾這... – Selvin
http://selvin.pl/MainActivity.java.txt檢查CacheFragment類和它的用法......從互聯網獲得的數據存儲在'JSONArray CacheFragment.response'中,並且它在屏幕變換中「生存」... loadData啓動新的請求或立即返回數據取決於「響應」是s et已經或沒有 – Selvin
謝謝@Selvin的幫助。我有點嘗試Eugen的解決方案,它的工作完美:) – AndroWeed