问题
i made a media player in android it's working great but when i change the screen orientation, the activity is being restarted i know that this question was already asked on stackoverflow several times but none of the answers helped me. i think i should use: onRetainNonConfigurationInstance
@Override
public Object onRetainNonConfigurationInstance() { ... }
but i didn't know the correct way to implement it so if someone could give me a tutorial or an implicit example i would be grateful
回答1:
I believe that onRetainNonConfigurationInstance()
is deprecated. It will tell you to use Fragments
instead. Here is a link to the Fragment
documentation. Basically, you will put your UI and data into a custom Fragment
, then use the FragmentManager
to store an instance of your Fragment
. Then, when the activity restarts, you can fetch your Fragment
and reposition as needed.
回答2:
Never mind that it's deprectated, it works fine. Simplest would be:
public Object onRetainNonConfigurationInstance() {
return this;
}
Then in YourActivity
's onCreate()
public void onCreate(Bundle savedState)
{
YourActivity prevActivity = (YourActivity)getLastNonConfigurationInstance();
if(prevActivity!= null) {
// So the orientation did change
// Restore some field for example
this.myValue = prevActivity.myValue;
}
}
回答3:
In my media player, in order not to re-create MediaPlayer completely, I did the following:
1) In AndroidManifest.xml added
<activity
android:name=".MainActivity"
android:configChanges="orientation|screenSize">
2) Inside the MainActivity added
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setSize(mVideoWidth, mVideoHeight);
}
I hope this helps someone.
来源:https://stackoverflow.com/questions/17045846/how-to-implement-onretainnonconfigurationinstance