Android 使用片段在屏幕旋转时保存数据
我正在android studio中开发一个应用程序。使用不同的XML文件来管理横向模式。这是在“布局土地”文件夹中 问题是,当您将纵向更改为横向时,在EditText中输入的值将丢失 我怎样才能防止这种情况发生 我使用Android Studio中的导航抽屉活动,因此这是我显示片段的代码: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
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);
}