gpt4 book ai didi

Android Fragment onDestroy 在方向更改期间调用了两次

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:38:30 26 4
gpt4 key购买 nike

我不明白为什么当设备的方向发生变化时,以下代码中的 fragment 类的 onDestroy 会被记录两次。有人可以向我解释我做错了什么吗?

public class ExampleActivity extends Activity {

protected String LOG_TAG = ExampleActivity.class.getSimpleName();

private FrameLayout mFragmentHolder;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

LogUtil.i(LOG_TAG, "onCreate");

setContentView(R.layout.activity_main);

mFragmentHolder = (FrameLayout) findViewById(R.id.root);

FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(mFragmentHolder.getId(),MyFragment.newInstance());
ft.commit();
}

@Override
protected void onDestroy() {
super.onDestroy();
LogUtil.i(LOG_TAG, "onDestroy");
}

@Override
protected void onPause() {
super.onPause();
LogUtil.i(LOG_TAG, "onPause");
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
LogUtil.i(LOG_TAG, "onRestoreInstanceState");
}

@Override
protected void onResume() {
super.onResume();
LogUtil.i(LOG_TAG, "onResume");
}

@Override
protected void onStart() {
super.onStart();
LogUtil.i(LOG_TAG, "onStart");
}

@Override
protected void onStop() {
super.onStop();
LogUtil.i(LOG_TAG, "onStop");
}


}

这里的 fragment 是 fragment 类

public class MyFragment extends Fragment {

protected String LOG_TAG = MyFragment.class.getSimpleName();

public static Fragment newInstance(){
return new MyFragment();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.screen_login, container,
false);

return view;
}

@Override
public void onDestroy() {
super.onDestroy();
LogUtil.i(LOG_TAG, "onDestroy");
}

@Override
public void onPause() {
super.onPause();
LogUtil.i(LOG_TAG, "onPause");
}

@Override
public void onResume() {
super.onResume();
LogUtil.i(LOG_TAG, "onResume");
}

@Override
public void onStart() {
super.onStart();
LogUtil.i(LOG_TAG, "onStart");
}

@Override
public void onStop() {
super.onStop();
LogUtil.i(LOG_TAG, "onStop");
}
}

这是 logcat 的输出

01-17 22:04:34.661: I/BaseApplication(21513): [0.0.7]-[BaseApplication]-[main]-[01/17/2014 22:04:34] onConfigurationChanged
01-17 22:04:34.706: I/MyFragment(21513): [0.0.7]-[MyFragment]-[main]-[01/17/2014 22:04:34] onPause
01-17 22:04:34.711: I/ExampleActivity(21513): [0.0.7]-[ExampleActivity]-[main]-[01/17/2014 22:04:34] onPause
01-17 22:04:34.721: I/MyFragment(21513): [0.0.7]-[MyFragment]-[main]-[01/17/2014 22:04:34] onStop
01-17 22:04:34.726: I/ExampleActivity(21513): [0.0.7]-[ExampleActivity]-[main]-[01/17/2014 22:04:34] onStop
01-17 22:04:34.731: I/MyFragment(21513): [0.0.7]-[MyFragment]-[main]-[01/17/2014 22:04:34] onDestroy
01-17 22:04:34.736: I/ExampleActivity(21513): [0.0.7]-[ExampleActivity]-[main]-[01/17/2014 22:04:34] onDestroy
01-17 22:04:34.766: I/ExampleActivity(21513): [0.0.7]-[ExampleActivity]-[main]-[01/17/2014 22:04:34] onCreate
01-17 22:04:34.866: I/MyFragment(21513): [0.0.7]-[MyFragment]-[main]-[01/17/2014 22:04:34] onDestroy
01-17 22:04:34.876: I/ExampleActivity(21513): [0.0.7]-[ExampleActivity]-[main]-[01/17/2014 22:04:34] onStart
01-17 22:04:34.881: I/MyFragment(21513): [0.0.7]-[MyFragment]-[main]-[01/17/2014 22:04:34] onStart
01-17 22:04:34.886: I/ExampleActivity(21513): [0.0.7]-[ExampleActivity]-[main]-[01/17/2014 22:04:34] onRestoreInstanceState
01-17 22:04:34.891: I/ExampleActivity(21513): [0.0.7]-[ExampleActivity]-[main]-[01/17/2014 22:04:34] onResume
01-17 22:04:34.896: I/MyFragment(21513): [0.0.7]-[MyFragment]-[main]-[01/17/2014 22:04:34] onResume

最佳答案

似乎使用支持库中的 FragmentActivity 可以自动保存和恢复实例。因此,仅当 savedInstanceStatenull 时才执行 fragment 事务。

例如,在您的FragmentActivityonCreate() 中,执行以下操作:

if(savedInstanceState == null){
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.fragment_container, mFragment).commit(); //mFragment is your own defined fragment
}

关于Android Fragment onDestroy 在方向更改期间调用了两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21199423/

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