旋转时活动内容消失

时间:2016-12-19 21:23:30

标签: android android-fragments rotation

在活动上有片段,旋转内容消失时。知道什么是错的吗?

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();
        }
    }
}

2 个答案:

答案 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...;
}

与片段的不同之处在于,恢复是在onCreateonCreateView中完成的,具体取决于您保存的内容以及您要对保存的内容执行的操作。

if( savedInstanceState != null )
    mObject = savedInstanceState.get(...);

答案 1 :(得分:0)

Fragment里面的

调用这个方法:

@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;
}