在我的android项目中有一个Fragment,它从另一个类动态获取数据。我将这些数据(一个字符串和Int)保存到bundle中。我希望在屏幕旋转时恢复该包。所以我使用了onSaveInstanceState方法。
在这个片段中,"回复"方法从另一个类获取数据(一个字符串和Int)。我可以在响应方法中在Logcat中打印这些字符串。
片段代码:
public class Images extends android.support.v4.app.Fragment implements Imageinfo {
private RecyclerView IRecyclerView;
private RecyclerView.Adapter IAdapter;
private RecyclerView.LayoutManager ILayoutManager;
private Context ctx;
private Bundle bundle=new Bundle();
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v =inflater.inflate(R.layout.images, container, false);
Log.d("ONCREATE VIEW", "TRUE");
IRecyclerView = (RecyclerView) v.findViewById(R.id.images_tab);
IRecyclerView.setHasFixedSize(true);
ILayoutManager = new LinearLayoutManager(getContext());
IRecyclerView.setLayoutManager(ILayoutManager);
if(savedInstanceState!=null){
Log.d("BUNDLE ADDED NOT NULL", String.valueOf(savedInstanceState.size()));
IAdapter = new ImageAdapter(this.getContext(),((fileselect)getContext()).imageset,bundle);
IRecyclerView.setAdapter(IAdapter);
}
else{
Log.d("BUNDLE ADDED NULL", "TRUE");
IAdapter = new ImageAdapter(this.getContext(),((fileselect)getContext()).imageset,null);
IRecyclerView.setAdapter(IAdapter);
}
return v;
}
@Override
public void onSaveInstanceState(Bundle outState) {
outState=bundle;
Log.d("SAVING TIME", String.valueOf(outState.size()));
super.onSaveInstanceState(outState);
}
@Override
public void respond(String str,int type) {
if(str!=null) {
if (type == 1) {
bundle.putString(str, str);
Log.d("BUNDLE ADDED", bundle.getString(str));
Log.d("BUNDLE ADDED Size",String.valueOf(bundle.size()));
} else {
bundle.remove(str);
Log.d("BUNDLE REMOVED Size", String.valueOf(bundle.size()));
}
}
}
}
问题:
虽然该方法响应接收数据(一个字符串和Int)并保存到Bundle中,但是当屏幕旋转时,bundle在onSaveInstanceState中变为大小为零。每当我旋转屏幕时,onSaveInstanceState就会被调用,但是这个包的大小为零。随着bundle的大小变为零,我无法恢复这两个字符串。
答案 0 :(得分:1)
确定问题在于,您尝试引用局部变量,而不是向ip
变量添加内容。
关键是outstate
类的实例在轮换时会被销毁,您的Images
变量也会被销毁。
实现您要执行的操作的正确方法是将字符串添加到bundle
方法中的outstate
变量,并从onSaveInstanceState
中读取savedInstanceState
1}}。
试试这个:
onCreateView