保存片段ListView的实例

时间:2015-10-07 17:13:20

标签: android android-fragments android-asynctask

我有一个包含两个片段(片段A和片段B)的主要活动。 一次只能显示一个片段。 两个片段都包含一个ListView(Frag A和Frag B都是通用的)。

1.创建活动时,Frag A通过AsyncTask加载其所有值

2.当我按下按钮时,我切换到进行相同过程的Frag B

3.再次按下按钮我切换到Frag A并再次调用AsyncTask

  

我不想执行第三步。相反我只想保存Frag A的实例。所以内容不会再次加载。我怎么能这样做?

我知道我将不得不再次停止调用AsyncTask,这将被处理。任何有关保存实例状态的帮助都非常感谢。

public class DepositFragement extends Fragment {
ProgressDialog pDialog;
private String TAG="DEPOSITS FRAGMENT";
PrefManager pref;
ListView depList;
ListView depoList;
Boolean isFirstTime=true;
Parcelable depoListInstance;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    setRetainInstance(true);
    return inflater.inflate(R.layout.deposits_fragment,container,false);
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putParcelable("Depo Instance", depoList.onSaveInstanceState());
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    if(savedInstanceState!=null)
    {
        depoListInstance = savedInstanceState.getParcelable("Depo Instance");
        depoList.onRestoreInstanceState(depoListInstance);
    }



    depoList=(ListView)getActivity().findViewById(R.id.lvDepositList);

    if(isNetworkAvailable())
    {
        if(isFirstTime) {
            new LoadDeposits().execute();
            isFirstTime = false;
        }
    }
    else {
        AlertDialog alertDialog = new  AlertDialog.Builder(getActivity()).create();

        alertDialog.setTitle("Info");
        alertDialog.setMessage("Internet not available, Cross check your internet connectivity and try again");
        alertDialog.setIcon(android.R.drawable.ic_dialog_alert);
        alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();

            }
        });
    alertDialog.show();
    }

}





}

2 个答案:

答案 0 :(得分:1)

您可以在片段上创建一个标志 - 就像(function ($) { 'use strict'; $.fn.firstVisitPopup = function (settings) { var $body = $('body'); var $dialog = $(this); var $blackout; var setCookie = function (name, value) { var date = new Date(), expires = 'expires='; date.setTime(date.getTime() + 31536000000); expires += date.toGMTString(); document.cookie = name + '=' + value + '; ' + expires + '; path=/'; } var getCookie = function (name) { var allCookies = document.cookie.split(';'), cookieCounter = 0, currentCookie = ''; for (cookieCounter = 0; cookieCounter < allCookies.length; cookieCounter++) { currentCookie = allCookies[cookieCounter]; while (currentCookie.charAt(0) === ' ') { currentCookie = currentCookie.substring(1, currentCookie.length); } if (currentCookie.indexOf(name + '=') === 0) { return currentCookie.substring(name.length + 1, currentCookie.length); } } return false; } var showMessage = function () { $blackout.show(); $dialog.show(); } var hideMessage = function () { $blackout.hide(); $dialog.hide(); setCookie('fvpp' + settings.cookieName, 'true'); } $body.append('<div id="fvpp-blackout"></div>'); $dialog.append('<a id="fvpp-close">&#10006;</a>'); $blackout = $('#fvpp-blackout'); if (getCookie('fvpp' + settings.cookieName)) { hideMessage(); } else { showMessage(); } $(settings.showAgainSelector).on('click', showMessage); $body.on('click', '#fvpp-blackout, #fvpp-close', hideMessage); }; })(jQuery); 当AsyncTask返回数据时设置为isLoaded

然后,在片段的true方法中,您可以使用:

onCreate

以便在片段暂停时保留数据。

在异步任务的post执行回调中,将字段设置为返回的数据。

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRetainInstance(true);
}

在onResume:

@Override
protected void onPostExecute(List<Object> result) {
    DepositFragement.this.dataResult = result;
    refreshAdapter();
}

答案 1 :(得分:-1)

对于每个片段,您可以覆盖onSaveInstanceState方法并在其中保存您想要的任何内容。

sed -i "/read -e -p 'Enter path for Boot Partition : '  BOOTUSERFILEPATH/BOOTUSERFILEPATH="../board-support/prebuilt-images"" file_to_search.sh

你也应该通过覆盖onActivityCreated来检索它。

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    //Save the fragment's state here
}