我有一项活动, 在我的一些片段上,我要去数据库获取数据。问题出在回来的路上。
当按下后退按钮时,片段会再次获取数据。 我需要它只获取一次数据(数据不会丢失)。 什么是正确的方法呢?
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.from_opening_to_plan, container,
false);
setRetainInstance(true); //work only once.
// --- Sending Data to Server -----//
startLoading();
ParseCloud.callFunctionInBackground(funcName, h,
new FunctionCallback<Object>() {
@SuppressWarnings("unchecked")
public void done(Object result, ParseException e) {
if (e == null) {
results = ((HashMap<String, Object>) result);
stopLoading();
}
else{
stopLoading();
}
}
});
return v;
}
protected void startLoading() {
proDialog = new ProgressDialog(this.getActivity(),ProgressDialog.THEME_HOLO_DARK);
proDialog.setMessage("Loading ...");
proDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
proDialog.setCancelable(false);
proDialog.show();
}
protected void stopLoading() {
proDialog.dismiss();
proDialog = null;
// Build the page from the results.
makePage();
}
@SuppressWarnings("deprecation")
public void makePage() {
LinearLayout ll_buttons = (LinearLayout) v2
.findViewById(R.id.buttons_frame);
LinearLayout ll_question = (LinearLayout) v2
.findViewById(R.id.question_frame);
TextView tv = new TextView(container2.getContext());
String text = (((HashMap) results).get("textPrefix").toString());
text = text.replace("\r", "\r\n\r\n ");
....
....
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
....
}
});
ll_buttons.addView(b1);
}
v2.setBackgroundDrawable(SMApplication.selectedVertical.gd);
}
答案 0 :(得分:0)
如果从该片段的构造函数中调用setRetainInstance(true)
,则每次重新创建Activity
时都不会重新创建片段,因此,如果尚未提取,则只能获取一次数据。
答案 1 :(得分:0)
找到解决方案(如果有人有更好的解决方案,请发布):
添加了onResume功能:
private boolean resumeHasRun = false;
@Override
public void onResume() {
super.onResume();
if (!resumeHasRun) {
resumeHasRun = true;
return;
}
makePage();
// Normal case behavior follows
}
onCreate中的添加:
if (resumeHasRun) {
resumeHasRun = true;
return;
}