片段setRetainInstance不工作(支持Android LIB) [英] Fragment setRetainInstance not works (Android support lib)

查看:229
本文介绍了片段setRetainInstance不工作(支持Android LIB)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

可能重复:结果
  <一href=\"http://stackoverflow.com/questions/12901760/android-fragments-setretaininstancetrue-not-works-android-support-library\">Android片段setRetainInstance(真)不工作(Android的支持库)

我写了一个简单的测试项目,但我不能明白,为什么我总是收到savedInstanceState = NULL的生命周期方法的onCreate,onCreateView和onActivityCreated。我改变屏幕的方向,看到了日志,但状态不保存。
请告诉我哪里是我的错误。
谢谢。
片段类的code是:

I wrote a simple test project, but I cant understand why I always receive savedInstanceState = null in lifecycle methods onCreate, onCreateView and onActivityCreated. I change the screen orientation, see the log, but state not saved. Tell me please where is my mistake. Thanks. The code of fragment class is:

public class TestFragment extends Fragment {

private String state = "1";

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    if (savedInstanceState != null) {
        //never works
        state = savedInstanceState.getString("state");
    }
    //always prints 1
    Toast.makeText(getActivity(), state, Toast.LENGTH_SHORT).show();
    return inflater.inflate(R.layout.fragment_layout, container, false);
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString("state", "2");
    Log.e("", "saved 2");
}

}

修改

当我尝试使用setRetainInstance我又没有结果(((我用BTN1改变状态2,但改变方向后,我看到1时BTN2 pressing。请帮助(

When i try to use setRetainInstance i have no result again((( I change a state to 2 using btn1, but after changing orientation i see 1 when pressing on btn2. Help please(

公共类TestFragment扩展片段{

public class TestFragment extends Fragment {

@Override
public void onCreate(Bundle savedInstanceState) {
    setRetainInstance(true);
    super.onCreate(savedInstanceState);
}

private String state = "1";

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

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

    //button for changing state
    ((Button)view.findViewById(R.id.button1)).setOnClickListener(new View.OnClickListener() {
        public void onClick(View arg0) {
            state = "2";
        }
    });

    //button for showing state
    ((Button)view.findViewById(R.id.button2)).setOnClickListener(new View.OnClickListener() {
        public void onClick(View arg0) {
            Toast.makeText(getActivity(), state, Toast.LENGTH_SHORT).show();
        }
    });

    return view;
}

}

推荐答案

我已经看到了同样的问题。但是你可以保存instate状态的另一种方式,由于方法setRetainInstance(真),所有的类数据会自动保存。

I have seen the same issue. But you can save the instate state in an other way, thanks to the method setRetainInstance(true), all your class data are saved automatically.

@Override
public void onCreate(Bundle savedInstanceState) {
    setRetainInstance(true);
    super.onCreate(savedInstanceState);
}

修改

时,尝试声明你的活动也添加这些PARAMS:

Try to also add these params when you declare your activities :

    <activity
        android:name="MyActivity"
        android:configChanges="orientation|keyboardHidden|screenSize" />

这篇关于片段setRetainInstance不工作(支持Android LIB)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆