我已经编写了以下代码来设置片段的字符串。通过使用startActivityForResult我得到的值,并设置为片段字符串即((firstString,secondString)当调用多个时间startActivityForResult时,片段数据丢失
但问题是,无论何时我调用startActivityForResult片段被重新创建和以前的数据丢失。例如,当我设置secondString比firstString的值丢失。
我已经提到了几个答案来保存和恢复片段数据,但无法做到这一点。
boolean isEditing = true;
LinearLayout first_layout, second_layout;
TextView first_textview, second_textview;
String firstString, secondString;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_profile);
if(savedInstanceState!=null)
{
if(savedInstanceState.getBoolean("isEditing",false))
{
Log.e("onSaveInstanceState","Restored");
isEditing=true;
firstString = savedInstanceState.getString(firstString);
secondString = savedInstanceState.getString(secondString);
}
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.mf_postload, container, false);
// Linearlayout
first_layout = (LinearLayout) view.findViewById(R.id.payment_layout_MF_PostLoad);
second_layout = (LinearLayout) view.findViewById(R.id.remark_layout_MF_PostLoad);
// TextView
first_textview = (TextView) view.findViewById(R.id.payment_MF_PostLoad);
second_textview = (TextView) view.findViewById(R.id.remark_MF_PostLoad);
first_textview.setText(firstString);
second_textview.setText(firstString);
// Listner
first_layout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getActivity().getApplicationContext(), Remark.class);
Integer requestCode = 1;
intent.putExtra("requestCode", requestCode);
startActivityForResult(intent, requestCode);
}
});
second_layout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getActivity().getApplicationContext(), Remark.class);
Integer requestCode = 2;
intent.putExtra("requestCode", requestCode);
startActivityForResult(intent, requestCode);
}
});
return view;
}
@Override
public void onSaveInstanceState(Bundle bundle)
{
super.onSaveInstanceState(bundle);
Log.e("onSaveInstanceState","Called");
try
{
if(isEditing)
{
bundle.putBoolean("isEditing",true);
bundle.putString("firstString",firstString);
bundle.putString("secondString",secondString);
Log.e("onSaveInstanceState","Called and Saved");
}
else
{
bundle.putBoolean("isEditing",false);
Log.e("onSaveInstanceState","Called and not Saved");
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
// Call Back method to get the Message form other Activity
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// First
if (requestCode == 1) {
if (resultCode == Activity.RESULT_OK && data != null) {
firstString = data.getStringExtra("remark_string");
first_textview.setText(firstString);
}
}
// Second
if (requestCode == 2) {
if (resultCode == Activity.RESULT_OK && data != null) {
secondString = data.getStringExtra("remark_string");
second_textview.setText(secondString);
}
}
}
当你调用一个新的活动旧其中包含您的片段被破坏,这意味着你的片段也被毁,其原因是该设备需要存储资源(RAM),所以它可以自动销毁背景活动和解决方案是覆盖'onSaveInstanceState'然后在'onCreate'中读取保存的值到它们各自的属性 –
@Haidar你能否给我提供一些示例代码以供参考 –
好吧,我会发布一个答案 –