我已经发布了一次这个问题,甚至尝试了所有可能的解决方案。所以,如果要进行投票,请至少提供正确的答案,因为我已经尝试了许多解决方案,但没有任何工作正在进行中。
在我的应用程序中,我在片段内部有一个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"));
}
}
在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);
}
答案 0 :(得分:0)
即使片段本身被保留,当设备在onDestroyView()
中旋转时,其视图也会被破坏(您还应该清除对视图的任何引用以防止泄漏旧方向)。
尝试恢复onActivityCreated()
中的文字无效,因为您从旧方向引用了视图,而且它们已不再使用。
当重新附加片段时(在为新方向创建的Activity中),在onCreateView()
中创建新的视图 - 您可以使用savedInstanceState
或任何片段字段将视图恢复到以前的状态:< / p>
@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
}