【发布时间】:2016-06-03 09:55:13
【问题描述】:
我在PagerSlidingTab 中有几个片段。因为一次加载所有片段,它没有良好的性能和质量(有时加载正确,有时转到 Volley onResponseError)。
在片段中,我加载 json 数据并使用 Json 数据填充 RecyclerView。
我的片段之一:
public class Fragment_four extends Fragment {
private boolean isFragmentLoaded = false;
private static final String FIRST_URL = "http://myapiservice.com/api/3";
private ProgressBar loadingProgressBar;
private ArrayList<ModelDars> darsha = new ArrayList<ModelDars>();
private RecyclerView reyclerCharDab;
private AdapterRecyclerDars adapterRecyclerDars;
private String after_url;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_four, container, false);
//======================================
loadingProgressBar = (ProgressBar) view.findViewById(R.id.prg_loading_frg_four);
//recyclerview init
reyclerCharDab = (RecyclerView) view.findViewById(R.id.recycler_frg_chaharom_dab);
reyclerCharDab.setHasFixedSize(true);
GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), 3);
reyclerCharDab.setLayoutManager(gridLayoutManager);
adapterRecyclerDars = new AdapterRecyclerDars(darsha, getActivity(), FIRST_URL, getActivity());
reyclerCharDab.setAdapter(adapterRecyclerDars);
if (helpers.isOnline(getActivity())) {
//creating volley object request
JsonObjectRequest request = new JsonObjectRequest(FIRST_URL, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
if (response != null || response.length() > 0) {
try {
JSONArray data = response.getJSONArray("data");
for (int i = 0; i < data.length(); i++) {
JSONObject currentData = data.getJSONObject(i);
ModelDars newModelDars = new ModelDars();
newModelDars.setDarsId(currentData.getString("id"));
newModelDars.setDarsTitle(currentData.getString("title"));
newModelDars.setDarsPoster(currentData.getString("poster"));
newModelDars.setDarsVisitCnt(currentData.getString("visitcnt"));
newModelDars.setDarsDate(currentData.getString("date"));
newModelDars.setDarsCatId(currentData.getString("cat_id"));
newModelDars.setDarsCatName(currentData.getString("cat_name"));
darsha.add(newModelDars);
}
after_url = response.getString("pagination");
} catch (JSONException e) {
e.printStackTrace();
}
//notify adapter about data changed
adapterRecyclerDars.notifyDataSetChanged();
loadingProgressBar.setVisibility(View.GONE);
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
loadingProgressBar.setVisibility(View.GONE);
Toast.makeText(getActivity(), "failed to fetch data from internet ", Toast.LENGTH_SHORT).show();
}
});
AppController.getInstance().addToRequestQueue(request);
// LOAD MORE FUNCTION =====================================================================
reyclerCharDab.addOnScrollListener(new EndlessRecyclerViewScrollListener(gridLayoutManager) {
@Override
public void onLoadMore(int page, int totalItemsCount) {
if (after_url == "null") {
} else {
JsonObjectRequest request = new JsonObjectRequest(after_url, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
if (response != null || response.length() > 0) {
try {
JSONArray data = response.getJSONArray("data");
for (int i = 0; i < data.length(); i++) {
JSONObject currentData = data.getJSONObject(i);
ModelDars newModelDars = new ModelDars();
newModelDars.setDarsId(currentData.getString("id"));
newModelDars.setDarsTitle(currentData.getString("title"));
newModelDars.setDarsPoster(currentData.getString("poster"));
newModelDars.setDarsVisitCnt(currentData.getString("visitcnt"));
newModelDars.setDarsDate(currentData.getString("date"));
newModelDars.setDarsCatId(currentData.getString("cat_id"));
newModelDars.setDarsCatName(currentData.getString("cat_name"));
darsha.add(newModelDars);
}
after_url = response.getString("pagination");
} catch (JSONException e) {
e.printStackTrace();
}
//notify adapter about data changed
adapterRecyclerDars.notifyDataSetChanged();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
AppController.getInstance().addToRequestQueue(request);
}
}
});
} else {
Toast.makeText(getActivity(), "You dont have internet !", Toast.LENGTH_SHORT).show();
loadingProgressBar.setVisibility(View.GONE);
}
return view;
}
}
这是视图寻呼机适配器:
public class MainActivityPagerAdapter extends FragmentStatePagerAdapter {
//============================================ Constructor
public MainActivityPagerAdapter(FragmentManager fm) {
super(fm);
}
//============================================ GetItem Method ()
@Override
public Fragment getItem(int position) {
Fragment frag = null;
switch (position) {
case 0:
frag = new Fragment_one();
break;
case 1:
frag = new Fragment_two();
break;
case 2:
frag = new Fragment_three();
break;
case 3:
frag = new Fragment_four();
break;
}
return frag;
}
//============================================= GetCount Method ()
@Override
public int getCount() {
return 4;
}
//============================================= GetPageTitle
@Override
public CharSequence getPageTitle(int position) {
String title = "";
switch (position) {
case 0:
title = "one";
break;
case 1:
title = "two";
break;
case 2:
title = "three";
break;
case 3:
title = "four";
break;
}
return title;
}
}
【问题讨论】:
-
您的适配器(重新)在每次需要显示它们时创建片段。考虑将它们保存为成员,只创建一次,然后在
getItem中返回对应的一个 -
你能给我简单的代码吗
标签: android json android-fragments android-viewpager