Заполнить каждый фрагмент в ViewPager с другим объектом JSON без загрузки снова
У меня есть ViewPager
это имеет Fragment
который содержит GridView в него
мой код работает нормально только когда я прокручиваю страницу с задержкой и каждый раз снова получаю контент из интернета
все, что я хочу сделать, это просто получить содержимое каждой страницы один раз и использовать его, когда пользователь прокручивает страницу
одна из моих проблем заключается в том, что JSON simultaneously
когда прокручивается несколько страниц, и я не знаю, как сохранить содержимое моего gridview для следующего использования, которое называется страницей
Есть ли стандартный способ победить эту проблему?
вот PagerAdapter для моего ViewPager:
public class ViewPagerAdapter extends FragmentStatePagerAdapter {
String[] tabName;
public ViewPagerAdapter(FragmentManager fm, String[] tabArray) {
super(fm);
this.tabName = new String[tabArray.length];
this.tabName = tabArray;
}
@Override
public Fragment getItem(int position) {
TabPageFragment tabPageFragment = new TabPageFragment(position);
return tabPageFragment;
}
@Override
public int getCount() {
return tabName.length;
}
@Override
public CharSequence getPageTitle(int position) {
return tabName[position];
}
}
каждая страница ViewPager использует этот класс для заполнения фрагмента:
public class TabPageFragment extends Fragment {
private GridView mgridview; // gridView inside Fragment
private int tabPosition;
private ArrayAdapterGridview arrayadapter; //adapter for my gridView
public TabPageFragment(int tabposition) {
this.tabPosition = tabposition;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mgridview = (GridView) rootView.findViewById(R.id.gridView2);
View rootView = inflater.inflate(R.layout.fragment_grid_view, container,false);
DownloadContentTab dct = new DownloadContentTab();
dct.execute();
return rootView;
}
// DownloadJSON AsyncTask
private class DownloadContentTab extends AsyncTask<Void, Void, Integer> {
@Override
protected Integer doInBackground(Void... params) {
JSONfunctions jsf = new JSONfunctions(); //this function retrieve's json for me
JSONArray jsonarray = jsf.getJSONfromURL(myUrl); // this url is differ for each page
String[] gridNameArray = new String[jsonarray.length()];
String[] gridPicArray = new String[jsonarray.length()];
for (int j = 0; j < jsonarray.length(); j++) {
try {
JSONObject jsonobject = jsonarray.getJSONObject(j);
gridNameArray[j] = jsonobject.getString("title");
gridPicArray[j] = jsonobject.getString("pic");
} catch (JSONException e) {
e.printStackTrace();
}
}
arrayadapter = new ArrayAdapterGridview(context, gridPicArray, gridNameArray);
return 0;
}
@Override
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
mgridview.setAdapter(arrayadapter);
}
}
}