在活动上有片段,旋转内容消失时。知道什么是错的吗?
public class MenuActivity extends AppCompatActivity {
static MenuActivity menuActivity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
menuActivity = this;
setContentView(R.layout.menu);
App.setContext(this);
if (savedInstanceState == null) {
getFragmentManager().beginTransaction().add(R.id.frameLayout, new MessageListFragment()).commit();
}
}
}
答案 0 :(得分:1)
您必须保存片段的实例状态。您必须从活动和片段中保存片段的状态。基本上,活动触发片段以保存其实例状态。从活动中,您可以执行以下操作:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//Save the fragment's instance
getSupportFragmentManager().putFragment(outState, "messageFragment", mFragment );
}
然后你在onCreate
恢复它:
if( savedInstanceState != null )
mFragment = (MessageListFrgment) getSupportFragmentManager().getFragment( savedInstanceState, "messageFragment" );
如果您需要保存的唯一内容是TextView
的内容,这应该足够了。例如,如果要保存变量,则需要在片段中执行类似的操作。片段的原理基本相同。
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// Save your variables in the bundle
outState.put...;
}
与片段的不同之处在于,恢复是在onCreate
和onCreateView
中完成的,具体取决于您保存的内容以及您要对保存的内容执行的操作。
if( savedInstanceState != null )
mObject = savedInstanceState.get(...);
答案 1 :(得分:0)
调用这个方法:
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setRetainInstance(true);
}
此外,您需要检查View是否为null,并阻止重新创建它。
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
if (view == null) {
view = inflater.inflate(R.layout.fragment, container, false);
// ...
}
return view;
}