package com.laowch.githubtrends.ui; import android.content.Context; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.Volley; import com.laowch.githubtrends.Constants; import com.laowch.githubtrends.R; import com.laowch.githubtrends.model.Language; import com.laowch.githubtrends.model.Repo; import com.laowch.githubtrends.request.GsonRequest; import com.laowch.githubtrends.utils.AttrsHelper; /** * Created by lao on 15/9/23. */ public class RepoListFragment extends Fragment { final static String TAG = "RepoListFragment"; public static Fragment newInstance(Context context, Language language, String timeSpan) { Bundle bundle = new Bundle(); bundle.putSerializable("extra_language", language); bundle.putSerializable("extra_time_span", timeSpan); return Fragment.instantiate(context, RepoListFragment.class.getName(), bundle); } Language language; String timeSpan; SwipeRefreshLayout swipeRefreshLayout; RepoListAdapter adapter; RequestQueue mRequestQueue; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); language = (Language) getArguments().getSerializable("extra_language"); timeSpan = (String) getArguments().getSerializable("extra_time_span"); mRequestQueue = Volley.newRequestQueue(getContext()); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); swipeRefreshLayout.post(new Runnable() { @Override public void run() { swipeRefreshLayout.setRefreshing(true); } }); executeGetRepos(); } @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_repo_list, container, false); swipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.swipe_refresh_layout); swipeRefreshLayout.setColorSchemeColors(AttrsHelper.getColor(getContext(), R.attr.colorPrimary), AttrsHelper.getColor(getContext(), R.attr.colorPrimaryLight)); swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { executeGetRepos(); } }); adapter = new RepoListAdapter(getContext(), language); RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view); recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); recyclerView.setAdapter(adapter); return view; } public void updateTimeSpan(String timeSpan) { this.timeSpan = timeSpan; executeGetRepos(); } @Override public void onStop() { super.onStop(); if (mRequestQueue != null) { mRequestQueue.cancelAll(TAG); } } private void executeGetRepos() { // network request String url = Constants.URL + language.path + "_" + timeSpan; GsonRequest<Repo[]> request = new GsonRequest(url, Repo[].class, new Response.Listener<Repo[]>() { @Override public void onResponse(Repo[] response) { adapter.setItems(response); swipeRefreshLayout.setRefreshing(false); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // TODO process error swipeRefreshLayout.setRefreshing(false); } }); request.setTag(TAG); mRequestQueue.add(request); } }