我已经发布了这个问题一次,甚至尝试了所有可能的解决方案。因此,如果要投反对票,请至少提供正确的答案,因为我尝试了许多解决方案,但没有任何效果。
在我的应用程序中,我在片段中有一个 EditText,它在方向改变时会失去其值。还有一件事,我为不同的方向使用不同的布局。有没有办法保留片段数据?我再次提到"片段数据"。请在下面找到我的片段代码以供进一步参考。
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putString("fname",etxt_firstname.getText().toString());
outState.putString("lname",etxt_lastname.getText().toString());
super.onSaveInstanceState(outState);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// retain this fragment
setRetainInstance(true);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if(savedInstanceState!= null)
{
etxt_firstname.setText(savedInstanceState.getString("fname"));
etxt_lastname.setText(savedInstanceState.getString("lname"));
}
}
Inside OnCreateView((:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
shrp_sharedpreferences = myContext.getSharedPreferences("shrp", Context.MODE_PRIVATE);
View view = null;
if(!isTablet(myContext))
{
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)
{
view = inflater.inflate(R.layout.fragment_home_landscape, container, false);
}
else
{
view = inflater.inflate(R.layout.fragment_home, container, false);
}
}
else
{
view = inflater.inflate(R.layout.fragment_home, container, false);
}
了片段本身,当设备旋转onDestroyView()
时,其视图也会被破坏(您还应该清除对那里的视图的任何引用,以防止泄漏旧方向(。
尝试在 onActivityCreated()
中还原文本不会执行任何操作,因为您引用的是旧方向的视图,并且不再使用它们。
重新附加片段时(在为新方向创建的活动中(,将在onCreateView()
中创建新视图 - 您可以在savedInstanceState
或任何片段字段中将视图恢复到以前的状态:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// (...) your layout inflation and view binding logic...
if(savedInstanceState != null){
etxt_firstname.setText(savedInstanceState.getString("fname"));
etxt_lastname.setText(savedInstanceState.getString("lname"));
}
// return view you inflated
}