Reputation: 13
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
Reputation: 177
If you are using Viewpager then just add
pager.setOffscreenPageLimit(limit)
Upvotes: 1
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
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