Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用片段在屏幕旋转时保存数据_Android_Android Fragments_Landscape - Fatal编程技术网

Android 使用片段在屏幕旋转时保存数据

Android 使用片段在屏幕旋转时保存数据,android,android-fragments,landscape,Android,Android Fragments,Landscape,我正在android studio中开发一个应用程序。使用不同的XML文件来管理横向模式。这是在“布局土地”文件夹中 问题是,当您将纵向更改为横向时,在EditText中输入的值将丢失 我怎样才能防止这种情况发生 我使用Android Studio中的导航抽屉活动,因此这是我显示片段的代码: public boolean onNavigationItemSelected(MenuItem item) { // Handle navigation view item clicks her

我正在android studio中开发一个应用程序。使用不同的XML文件来管理横向模式。这是在“布局土地”文件夹中

问题是,当您将纵向更改为横向时,在EditText中输入的值将丢失

我怎样才能防止这种情况发生

我使用Android Studio中的导航抽屉活动,因此这是我显示片段的代码:

 public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();

    if (id == R.id.nav_camara) {
      fragmentCalcularIMC fragment = new fragmentCalcularIMC();
        android.support.v4.app.FragmentTransaction fragmentTransaction =
                getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.fragment_container,fragment);
        fragmentTransaction.commit();

    } 
下面是片段的java文件中的代码:

public class fragmentCalcularIMC extends Fragment  {


View v;
private String varaltura;
private EditText etaltura, etpeso, etedad;
public fragmentCalcularIMC() {

}


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

     v = inflater.inflate(R.layout.fragment_fragment_calcular_imc, container, false);


    etaltura = (EditText)v.findViewById(R.id.editTexth);
    etpeso = (EditText)v.findViewById(R.id.editText2);
    String [] values =  getResources().getStringArray(R.array.valoresEstatura);
    Spinner spinner = (Spinner) v.findViewById(R.id.spinner);
    EditText editText1 = (EditText) v.findViewById(R.id.editTexth);


    ArrayAdapter<String> LTRadapter = new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_spinner_item, values);
    LTRadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
    spinner.setAdapter(LTRadapter);

    spinner.setAdapter(LTRadapter);


    // Inflate the layout for this fragment
    return v;

}}
公共类fragmentCalcularIMC扩展了Fragment{
观点五;
私有字符串瓦拉图拉;
私人编辑文本etaltura,etpeso,etedad;
公共碎片{
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
v=充气机。充气(R.layout.fragment\u fragment\u calcular\u imc,容器,假);
etaltura=(编辑文本)v.findViewById(R.id.editexth);
etpeso=(EditText)v.findViewById(R.id.editText2);
String[]values=getResources().getStringArray(R.array.valoresEstatura);
微调器微调器=(微调器)v.findViewById(R.id.Spinner);
EditText editText1=(EditText)v.findViewById(R.id.editTexth);
ArrayAdapter LTRadapter=新的ArrayAdapter(this.getActivity(),android.R.layout.simple\u spinner\u项,值);
LTRadapter.setDropDownViewResource(android.R.layout.simple\u dropdown\u item\u 1line);
旋转器。旋转适配器(LTRadapter);
旋转器。旋转适配器(LTRadapter);
//为该碎片膨胀布局
返回v;
}}

为此,需要重写
onSaveInstanceState()
方法

像这样保存数据

@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("data", yourdata);  
 }
然后将其保留在
onCreateView()中


希望对您有所帮助

您可以尝试在片段的
onCreate
中这样设置
setRetainInstance()

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

        setRetainInstance(true);

    }

您是否在SaveInstanceState()上实现了
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setRetainInstance(true);

    }