我真的無法做到這一點,所以我會很感激任何提示。我必須在這裏犯一些錯誤(4.1.2)。Android:ListView,同時在旋轉/配置更改後記住並忘記它的getCheckedItemPosition
我有一個Activity
其中,在onCreate()
,建立一個子類ArrayAdapter
爲ListView
項目,其呈現爲Checkable
ViewGroup
。
Activity
已經利用NonConfiguration
機制在定位更改時重新構建適配器。但是,它目前不存儲ListView
的getCheckedItemPosition()
,因爲我覺得它不應該是必要的(詳情如下)。
有趣的是,我正在觀察的是以下內容。
- 活動已呈現。
- 用戶檢查一個ListView項目。
- ListView項目以選中狀態顯示。
onItemClickListener
調用getCheckedItemPosition()
爲ListView
並得到正確的結果。- 用戶更改屏幕方向。
onCreate()
重新構建「ListView」,它會像以前一樣顯示(在onCreate()
之後;參見下文)。onCreate()
調用getCheckedItemPosition()
,並得到-1
儘管ListView
顯示經過進一步研究,正確地將檢查項目
,以下細節浮出水面。
onCreate()
:- 得到
ListView
資源 - 構建
MyAdapter
- 設置
MyAdapter
作爲適配器ListView
getCheckedItemPosition()
回報-1
- 得到
- 後:
MyAdapter.getView()
被稱爲CheckableViewGroup.setChecked()
時調用正確的checked
值- 最後兩個步驟將重複所有項目
正如之前所說的,我依靠Android功能View
對象保存其狀態,如果他們有一個ID分配。我會說這是事實,因爲必須有一些對象爲所有列表條目設置正確的checked
狀態。(順便說一下,CheckableViewGroup
還覆蓋但不會被稱爲無論它是否具有分配的(大概是因爲它永遠不會被附着到佈局根的ID?)。
所以看起來好像ListView
在同一時間知道和不知道它getCheckedItemPosition()
?還是我在錯誤的軌道上?
public final class MyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_activity);
itemList = (ListView)findViewById(R.id.ma_list);
listAdapter = new MyAdapter();
itemList.setAdapter(listAdapter);
itemList.setOnItemClickListener(
new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> av, View v, int pos, long id) { checkForm(); }
}
);
listAdapterSetup();
// this is where itemList.getCheckedItemPosition() returns -1
// when the listView has been re-built from NonConfiguration data:
checkForm();
}
}