gillangit
gillangit

Reputation: 13

how to recall android fragment without run again JSON?

I want if fragemnt is recall, the fragment show view it first call not run json again. my code after i open fragment again the fragment is request json again. I am a beginner in java/android programming but I was trying to add different tutorials to create a customized application that does what I want, this could be something easy to most of the people here but am stuck

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
        mParam1 = getArguments().getString(ARG_PARAM1);
        mParam2 = getArguments().getString(ARG_PARAM2);
    }
    // Creating volley request obj
    JsonArrayRequest billionaireReq = new JsonArrayRequest(getURL,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    url_maps = new HashMap<String, String>();
                    // Parsing json
                    for (int i = 0; i < response.length(); i++) {
                        try {

                            JSONObject obj = response.getJSONObject(i);
                            url_maps.put(obj.getString("title") + " - " + obj.getString("releaseYear"), obj.getString("image"));

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }

                    for (String name : url_maps.keySet()) {
                        TextSliderView textSliderView = new TextSliderView(getActivity());
                        // initialize a SliderLayout
                        textSliderView
                                .description(name)
                                .image(url_maps.get(name))
                                .setScaleType(BaseSliderView.ScaleType.CenterCrop)
                                .setOnSliderClickListener(HomeFragment.this);

                        //add your extra information
                        textSliderView.bundle(new Bundle());
                        textSliderView.getBundle().putString("extra", name);

                        mSlider.addSlider(textSliderView);
                    }
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(getActivity(), "network issue: please enable wifi/mobile data", Toast.LENGTH_SHORT).show();
        }
    });

    // Adding request to request queue
    AppController.getInstance().addToRequestQueue(billionaireReq);


}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_home, container, false);
    mSlider = (SliderLayout) view.findViewById(R.id.slider_home);
    gridView = (GridView) view.findViewById(R.id.grid);
    gridView.setAdapter(new CustomAndroidGridViewAdapter(getActivity(), gridViewStrings, gridViewImages));
    mSlider.setPresetTransformer(SliderLayout.Transformer.Stack);
    mSlider.setPresetIndicator(SliderLayout.PresetIndicators.Center_Top);
    mSlider.setCustomAnimation(new DescriptionAnimation());
    mSlider.setDuration(4000);
    return view;
}

Upvotes: 1

Views: 380

Answers (3)

PattySpringDev
PattySpringDev

Reputation: 177

If you are using Viewpager then just add

pager.setOffscreenPageLimit(limit)

Refer this post

Upvotes: 1

miljon
miljon

Reputation: 2771

Override onSaveInstanceState method to save instance of your json. In your case, uou have store it in String variable or in object that implements Parcelable interface. List of valid data structures to save is here: https://developer.android.com/reference/android/os/Bundle.html

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString("yourString", yourJsonInstance);
    outState.putString("yourParcelableObj", yourParcelableObj);
    //some other variables to save state
}

You have to ways to restore your data, you can do it by override onRestoreInstanceState method. Or you can do it in onCreate method by checking if savedInstanceState store your data:

this runs after onCreate:

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

    // Restore data here
    yourJsonString = savedInstanceState.getString("yourString");
}

or this you can put in your onCreate method:

if (savedInstanceState != null) {
    // Restore data here
    yourJsonString = savedInstanceState.getString("yourString");
} else{
    //else get your json normally
}

Upvotes: 1

Pratibha sarve
Pratibha sarve

Reputation: 369

"my code after i open fragment again the fragment is request json again" What i got from your question is, you don't want to request json again if you already visited same fragment in the past. you can do do one thing, When you visit fragment first time save to json object into the Bundle in the saveStateInstance(Bundle bundle) override method and when you revisit fragment check and extract json from paramer bundle of onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) method. In this way you can maintain state of the fragment.

Upvotes: 2

Related Questions