重新创建实例

时间:2016-08-09 05:04:40

标签: android android-activity

我有一个表格,其中我填写了详细信息&使用Google Maps获取我所在的位置。但是当我从地图获取位置后返回活动时,所有字段都是null

如何在移动到地图之前存储状态并在从地图活动返回后获得准确的状态?

编辑:碎片&on;创建

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);

    // Here I used recreate but it didn't work
    // getActivity.recreate();

    View view = inflater.inflate(R.layout.fragment_login, container, false);
    ButterKnife.bind(this, view);
    return view;
}

从这里开始我要去映射活动

@OnClick(R.id.frag_expense_lllocation)
    public void getLocation(){
        UiActivity.startMapActivity(context);
    }

并返回选定位置的当前活动

 double lat = marker.getPosition().latitude;                                                            
 double lng =     marker.getPosition().longitude;                                                            
 String position = lat + "," + lng;        
 UiActivity.startExpenseActivity(getContext(), position); 
 getActivity().finish();

2 个答案:

答案 0 :(得分:0)

@gaurav你可以使用onSaveInstanceState()和onRestoreInstanceState() 回调很容易完成这项任务。

在第一次回调中,您需要保存要保存的状态 从第二个你可以恢复状态。 有关详细信息,您可以查看How to use onSaveInstanceState() and onRestoreInstanceState()

的答案

答案 1 :(得分:0)

当您的活动开始停止时,系统会调用onSaveInstanceState(),以便您的活动可以使用一组键值对保存状态信息。此方法的默认实现保存有关活动视图层次结构状态的信息,例如EditText小部件中的文本或ListView的滚动位置。

要保存活动的其他状态信息,必须实现onSaveInstanceState()并将键值对添加到Bundle对象。例如:

您需要覆盖

 onSaveInstanceState(Bundle savedInstanceState)

将要更改的应用程序状态值写入Bundle参数,如下所示:

static final String STATE_SCORE = "playerScore";
static final String STATE_LEVEL = "playerLevel";
...

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    // Save the user's current game state
    savedInstanceState.putInt(STATE_SCORE, mCurrentScore);
    savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel);

    // Always call the superclass so it can save the view hierarchy state
    super.onSaveInstanceState(savedInstanceState);
}

恢复您的活动状态

在先前销毁活动后重新创建活动时,您可以从系统通过活动的Bundle中恢复已保存的状态。 onCreate()和onRestoreInstanceState()回调方法都接收包含实例状态信息的相同Bundle。

因为无论系统是创建活动的新实例还是重新创建前一个实例,都会调用onCreate()方法,因此在尝试读取之前必须检查状态Bundle是否为null。如果它为null,则系统正在创建活动的新实例,而不是恢复之前被销毁的实例。

例如,以下是如何在onCreate()中恢复某些状态数据的方法:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); // Always call the superclass first

    // Check whether we're recreating a previously destroyed instance
    if (savedInstanceState != null) {
        // Restore value of members from saved state
        mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
        mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
    } else {
        // Probably initialize members with default values for a new instance
    }
    ...
}