在 onSaveInstanceState() 回调时 Fragment 变为 null 的视图

Run*_*ion 5 android

我有一个这样的Fragment(使用过的支持库)

public class ItemDetailsFragment extends Fragment {
    private ListView itemsListView;

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        itemsListView = (ListView) view.findViewById(R.id.listMode);
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        ItemsAdapter adapter = (ItemsAdapter) itemsListView.getAdapter();
        ArrayList<String> items = adapter.getItems();
        outState.putStringArrayList("some_key", items);
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,itemsListView已正确初始化。当我将 Adapter 设置为这个 ListView 时,ListView 会正确显示项目。但是当我打电话

 itemsListView.getAdapter();
Run Code Online (Sandbox Code Playgroud)

onSaveInstanceState回调中,我得到了 NPE,我认识到这itemsListViewnull在调试时。我相信我不会分配itemsListViewnull整个Fragment. 更重要的是,我只是有时会收到此 NPE 错误,但我无法说出它何时出现。

错误可能在哪里?为什么itemsListView只变成null了某些时候?

谢谢大家...

Szy*_*mon 5

Android 文档中有关于onSaveInstanceState片段的注释:

这对应于 Activity.onSaveInstanceState(Bundle) 并且那里的大部分讨论也适用于此。但是请注意:此方法可以在 onDestroy() 之前的任何时间调用。在很多情况下,一个片段可能大部分被拆除(例如当放置在没有 UI 显示的后端堆栈上时),但它的状态不会被保存,直到它的拥有 Activity 实际需要保存它的状态。

它使得使用onSaveInstanceState片段的方法变得相当棘手。