1

我正在使用onRestoreInstanceStateandroid的方法来获取屏幕旋转时的信息,它工作正常,除了一件事。

当我尝试将已初始化的 menuItem 设置为可见时onCreateOptionsMenu,它会变得NullPointerException并且对于项目出现的功能非常重要

有谁知道如何解决这一问题?

非常感谢您的帮助

我的初始化项目的方法

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater menuInflater = getMenuInflater();
    menuInflater.inflate(R.menu.map, menu);
    itemClean = menu.findItem((R.id.map_clear_lines));
    return true;

}

我恢复信息的方法

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    mapa.moveCamera(CameraUpdateFactory.newLatLngZoom(
    (LatLng)savedInstanceState.getParcelable(MapConstants.MAP_CAMERA_LATLNG),
            savedInstanceState.getFloat(MapConstants.MAP_CAMERA_ZOOM)));
    if(savedInstanceState.getBoolean(MapConstants.MAP_TYPE)){
        stateSatelitalMap();
        }

    if(savedInstanceState.containsKey(MapConstants.ROUTES_START)){
        LatLng starLatLng = savedInstanceState.getParcelable(MapConstants.ROUTES_START);
        LatLng finishLatLng = savedInstanceState.getParcelable(MapConstants.ROUTES_END);

        markerStart = mapa.addMarker(new MarkerOptions().position(starLatLng).icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_inici_fin))
                .title(getResources().getString(R.string.marker_confirm_start)).snippet(getResources().getString(R.string.snippet_confirm_start)));

        markerFinish = mapa.addMarker(new MarkerOptions().position(finishLatLng).icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_inici_fin))
                .title(getResources().getString(R.string.marker_confirm_end)).snippet(getResources().getString(R.string.snippet_confirm_end)));

        getRoute(starLatLng, finishLatLng);
        booleanEndConfirmed = true;
        booleanStartConfirmed = true;
        itemClean.setVisible(true);
    }

一切正常,除了最后一行,menuItem 在我使用它而不旋转屏幕时不会引起问题

4

1 回答 1

0

根据 Tim Mutton 的推荐,我创建了一个全局变量并在 OnCreateMenuOptions 中设置

private boolean booleanItemVisible = false;


@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
...
booleanItemVisible = true;
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    ...
    itemClean.setVisible(booleanItemVisible);
    return true;
}
于 2015-05-18T13:59:54.760 回答