0
在閱讀安卓手冊時得到了以下示例。有人可以向我確認爲什麼在這個例子中總是創建適配器嗎?不應該只在model == null的情況下才能完成嗎? 如果我理解正確,所有數據成員都被保留(在這個例子中),所以ListView將被保留,以及它的配置好的ListAdapter和其他一切。setRetainInstance with Fragment
public class AsyncDemoFragment extends SherlockListFragment {
private static final String[] items = { "lorem", "ipsum", "dolor" };
private ArrayList<String> model = null;
private ArrayAdapter<String> adapter = null;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setRetainInstance(true);
if (model == null) {
model = new ArrayList<String>();
new AddStringTask().execute();
}
adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, model);
setListAdapter(adapter);
}
class AddStringTask extends AsyncTask<Void, String, Void> {
// …
protected void onProgressUpdate(String... item) {
adapter.add(item[0]);
}
}
}
感謝您的回覆。但只是爲了澄清。帶有setRetainInstance的片段(true)會將其視圖對象的所有視圖都銷燬嗎?如果是 - 那麼適配器實例仍將保留。正確?所以,如果存在(如果(model == null)),則不必再次創建。沒有? – Leon 2014-10-06 21:33:30
如果(模型== null)在模塊內部放置adapter = new ArrayAdapter不是更好,所以它不會在它存在的情況下創建新實例... – Leon 2014-10-06 21:41:00
正確,您應該明確釋放所有視圖在onDestroyView()中引用以避免泄漏活動引用。實際上,我會在'onDestroyView()'中明確地將適配器引用無效(因爲適配器持有對正在銷燬的Activity實例的強引用,以便對項目視圖進行充氣)。保持模型,但重新創建視圖時重新創建適配器。 – kcoppock 2014-10-06 22:00:20