gpt4 book ai didi

android - onSaveInstanceState(Bundle) 方法未定义

转载 作者:行者123 更新时间:2023-11-29 00:26:05 25 4
gpt4 key购买 nike

我目前正在做一个关于 eclipse android 开发的教程系列,我正在尝试复制代码以帮助记住所有功能,但我收到 onSaveInstanceState(Bundle) 的错误,它说“onSaveInstanceState(Bundle) 方法是对象类型未定义”。我已经多次检查以确保一切准确无误,但没有发现任何错误。

protected void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);

outState.putDouble(TOTAL_BILL, finalBill);
outState.putDouble(CURRENT_TIP, tipAmount);
outState.putDouble(BILL_WITHOUT_TIP, finalBill);
}

最佳答案

您需要使用@Override 并确保您的类扩展Activity。只要具备这两个条件,您就应该做得很好。

class MyActivity extends Activity {

@Override // May be public depending on the class you are extending
protected void onSaveInstanceState(Bundle outState) {

outState.putDouble(TOTAL_BILL, finalBill);
outState.putDouble(CURRENT_TIP, tipAmount);
outState.putDouble(BILL_WITHOUT_TIP, finalBill);

// Wait till after you've added your items to pass the bundle
super.onSaveInstanceState(outState);
}
}

根据Activity文档页面其他扩展 Activity 的类是 AccountAuthenticatorActivity , ActivityGroup , AliasActivity , ExpandableListActivity , FragmentActivity , ListActivity , NativeActivity , ActionBarActivity , LauncherActivity , PreferenceActivityTabActivity .

如果您想弄清楚某些东西是如何工作的,那么 Android 源代码也是一个不错的地方。很多时候,这些注释更多地描述了事情是如何实现的以及它们依赖什么。

引用:core/java/android/app/Activity.java

    /**
* Called to retrieve per-instance state from an activity before being killed
* so that the state can be restored in {@link #onCreate} or
* {@link #onRestoreInstanceState} (the {@link Bundle} populated by this method
* will be passed to both).
*
* <p>This method is called before an activity may be killed so that when it
* comes back some time in the future it can restore its state. For example,
* if activity B is launched in front of activity A, and at some point activity
* A is killed to reclaim resources, activity A will have a chance to save the
* current state of its user interface via this method so that when the user
* returns to activity A, the state of the user interface can be restored
* via {@link #onCreate} or {@link #onRestoreInstanceState}.
*
* <p>Do not confuse this method with activity lifecycle callbacks such as
* {@link #onPause}, which is always called when an activity is being placed
* in the background or on its way to destruction, or {@link #onStop} which
* is called before destruction. One example of when {@link #onPause} and
* {@link #onStop} is called and not this method is when a user navigates back
* from activity B to activity A: there is no need to call {@link #onSaveInstanceState}
* on B because that particular instance will never be restored, so the
* system avoids calling it. An example when {@link #onPause} is called and
* not {@link #onSaveInstanceState} is when activity B is launched in front of activity A:
* the system may avoid calling {@link #onSaveInstanceState} on activity A if it isn't
* killed during the lifetime of B since the state of the user interface of
* A will stay intact.
*
* <p>The default implementation takes care of most of the UI per-instance
* state for you by calling {@link android.view.View#onSaveInstanceState()} on each
* view in the hierarchy that has an id, and by saving the id of the currently
* focused view (all of which is restored by the default implementation of
* {@link #onRestoreInstanceState}). If you override this method to save additional
* information not captured by each individual view, you will likely want to
* call through to the default implementation, otherwise be prepared to save
* all of the state of each view yourself.
*
* <p>If called, this method will occur before {@link #onStop}. There are
* no guarantees about whether it will occur before or after {@link #onPause}.
*
* @param outState Bundle in which to place your saved state.
*
* @see #onCreate
* @see #onRestoreInstanceState
* @see #onPause
*/
protected void onSaveInstanceState(Bundle outState) {
outState.putBundle(WINDOW_HIERARCHY_TAG, mWindow.saveHierarchyState());
Parcelable p = mFragments.saveAllState();
if (p != null) {
outState.putParcelable(FRAGMENTS_TAG, p);
}
getApplication().dispatchActivitySaveInstanceState(this, outState);
}

关于android - onSaveInstanceState(Bundle) 方法未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19342953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com