Android:setReatinInstance(true)不工作
我试图在配置更改时保留片段,但即使在使用setRetainInstace(true)之后,也会通过屏幕旋转调用onDestroy() 这是我的片段代码:Android:setReatinInstance(true)不工作,android,android-fragments,Android,Android Fragments,我试图在配置更改时保留片段,但即使在使用setRetainInstace(true)之后,也会通过屏幕旋转调用onDestroy() 这是我的片段代码: public class HelloMoonFragment extends Fragment{ private Button mPlay; private Button mStop; private Button mPause; private AudioPlayer mPlayer = new AudioP
public class HelloMoonFragment extends Fragment{
private Button mPlay;
private Button mStop;
private Button mPause;
private AudioPlayer mPlayer = new AudioPlayer();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setRetainInstance(true);
}
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_hello_moon, null);
mPlay = (Button) v.findViewById(R.id.hellomoon_playButton);
mPlay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mPlayer.play(view.getContext());
}
});
mStop = (Button) v.findViewById(R.id.hellomoon_stopButton);
mStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mPlayer.stop();
}
});
mPause = (Button) v.findViewById(R.id.hellomoon_pauseButton);
mPause.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
mPlayer.playpause();
}catch (IllegalStateException | NullPointerException ex){
mPlayer.play(getActivity());
}
}
});
return v;
}
@Override
public void onDestroyView() {
super.onDestroyView();
Toast.makeText(getActivity(), "Ikkkkkkkkkkkkkkkkkk", Toast.LENGTH_SHORT);
Log.i("HEYEE", "NOOO");
mPlayer.stop();
}
}
这是我的布局xml文件:
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/helloMoonFragment"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:name="com.github.domain.hellomoon.HelloMoonFragment">
</fragment>
为什么每次旋转都调用onDestroy()?onDestroy()不会被调用,但在您的示例中,它是:
@Override
public void onDestroyView() {
super.onDestroyView();
Toast.makeText(getActivity(), "Ikkkkkkkkkkkkkkkkkk", Toast.LENGTH_SHORT);
Log.i("HEYEE", "NOOO");
mPlayer.stop();
}
奥德斯特罗=onDestroyView
不会调用onDestroy()(但仍然会调用onDetach(),因为片段正在从其当前活动中分离)
当先前由onCreateView(LayoutInflater、ViewGroup、Bundle)创建的视图已从片段中分离时调用onDestroyView这是设计的<代码>onDestroyView()。但是,将不会调用onDestroy() 这是因为托管片段的
活动
仍可能被销毁并重新创建——因此,片段
中的任何视图
引用仍将保留对现在已死亡的活动
的引用。因此,预期的行为是,在配置更改期间,任何实例状态、正在运行的任务等都可以继续正常运行;但是,您仍有责任释放您的视图
引用,并在onCreateView()
中重新创建它们