从死亡中保存活动

时间:2014-10-20 14:05:13

标签: android android-fragments android-lifecycle

我有一项活动, 在我的一些片段上,我要去数据库获取数据。问题出在回来的路上。

当按下后退按钮时,片段会再次获取数据。 我需要它只获取一次数据(数据不会丢失)。 什么是正确的方法呢?

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);          
    }

2 个答案:

答案 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;
}