how to implement onRetainNonConfigurationInstance

蹲街弑〆低调 提交于 2019-12-19 02:39:53

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!