-
-
Save selmanon/b239d10ed2fc8b8724fc to your computer and use it in GitHub Desktop.
SwipeToRefreshLayout with support lib
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package pro.businessbook.fragments; | |
import java.util.ArrayList; | |
import java.util.Arrays; | |
import java.util.LinkedList; | |
import java.util.List; | |
import org.springframework.http.HttpEntity; | |
import org.springframework.http.HttpHeaders; | |
import org.springframework.http.HttpMethod; | |
import org.springframework.http.MediaType; | |
import org.springframework.http.ResponseEntity; | |
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; | |
import org.springframework.web.client.RestTemplate; | |
import pro.businessbook.MainApplication; | |
import pro.businessbook.R; | |
import pro.businessbook.adapters.ProfessionnelAdapter; | |
import pro.businessbook.beans.Profil; | |
import android.content.Context; | |
import android.os.AsyncTask; | |
import android.os.Bundle; | |
import android.os.Handler; | |
import android.support.v4.app.ListFragment; | |
import android.support.v4.widget.SwipeRefreshLayout; | |
import android.view.LayoutInflater; | |
import android.view.View; | |
import android.view.ViewGroup; | |
import android.widget.AbsListView; | |
import android.widget.AbsListView.OnScrollListener; | |
import android.widget.ListView; | |
import com.nhaarman.listviewanimations.itemmanipulation.OnDismissCallback; | |
import com.nhaarman.listviewanimations.itemmanipulation.swipedismiss.SwipeDismissAdapter; | |
import com.nhaarman.listviewanimations.swinginadapters.prepared.SwingBottomInAnimationAdapter; | |
public class ProfessionnelFragment extends ListFragment implements SwipeRefreshLayout.OnRefreshListener, OnDismissCallback { | |
ListView listViewProfessionels; | |
List<Profil> pages,pagesToAdd; | |
View rootView; | |
ProfessionnelAdapter adapter; | |
private SwipeRefreshLayout refreshLayout; | |
static int from; | |
static String requestFilter; | |
boolean scroll = true; | |
int offset = 8; | |
// USED FOR ENDLESS LISTVIEW | |
private View footer; | |
//private boolean isLoading; | |
public ProfessionnelFragment(int i,String filtre) { | |
this.from = i; | |
this.requestFilter = filtre; | |
} | |
public static ProfessionnelFragment newInstance() { | |
ProfessionnelFragment fragment = new ProfessionnelFragment(from,requestFilter); | |
return fragment; | |
} | |
@Override | |
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { | |
View view = inflater.inflate(R.layout.fragment_professionel, container, false); | |
refreshLayout = (SwipeRefreshLayout)view.findViewById(R.id.swipe_container); | |
refreshLayout.setOnRefreshListener(this); | |
//view.setPadding(0,0, 0, 50); | |
setAppearance(); | |
return view; | |
} | |
@Override | |
public void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
} | |
@Override | |
public void onDestroyView() { | |
super.onDestroyView(); | |
} | |
@Override | |
public void onActivityCreated(Bundle savedInstanceState) { | |
super.onActivityCreated(savedInstanceState); | |
if(from!=1){ | |
getActivity().findViewById(R.id.bottom_bar).setVisibility(View.VISIBLE); | |
getActivity().findViewById(R.id.bottom_bar_rechercher).setVisibility(View.GONE); | |
getActivity().findViewById(R.id.main_activity_linear_layout).setVisibility(View.GONE); | |
this.setLoadingView(R.layout.loading_layout); | |
} | |
Thread thread = new Thread(new Runnable(){ | |
@Override | |
public void run() { | |
try { | |
HttpHeaders requestHeaders = new HttpHeaders(); | |
List<MediaType> acceptableMedia = new ArrayList<MediaType>(); | |
acceptableMedia.add(MediaType.APPLICATION_JSON); | |
requestHeaders.setAccept(acceptableMedia); | |
HttpEntity< ?> requestEntity = new HttpEntity<Object>(requestHeaders); | |
RestTemplate restTemplate = new RestTemplate(); | |
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); | |
ResponseEntity<Profil[]> responseEntity; | |
if(from==1){ | |
responseEntity = restTemplate.exchange("http://www.businessbook.pro/api/v1/profils.json"+requestFilter, HttpMethod.GET, requestEntity, Profil[].class); | |
pages = new LinkedList(Arrays.asList(responseEntity.getBody())); | |
} | |
else | |
{ | |
//responseEntity = restTemplate.exchange("http://www.businessbook.pro/api/v1/profils.json", HttpMethod.GET, requestEntity, Profil[].class); | |
pages = new LinkedList(Arrays.asList(MainApplication.getProfils())); | |
} | |
//pages = new LinkedList(Arrays.asList(responseEntity.getBody())); | |
getActivity().runOnUiThread(new Runnable() { | |
@Override | |
public void run() { | |
adapter = new ProfessionnelAdapter(getActivity(),pages); | |
SwingBottomInAnimationAdapter swingBottomInAnimationAdapter; | |
swingBottomInAnimationAdapter = new SwingBottomInAnimationAdapter(new SwipeDismissAdapter(adapter, ProfessionnelFragment.this)); | |
swingBottomInAnimationAdapter.setInitialDelayMillis(300); | |
swingBottomInAnimationAdapter.setAbsListView(getListView()); | |
getListView().setAdapter(swingBottomInAnimationAdapter); | |
} | |
}); | |
} catch (Exception e) { | |
e.printStackTrace(); | |
} | |
} | |
}); | |
thread.start(); | |
if(from!=1) | |
getListView().setOnScrollListener(new EndlessListScrollListener()); | |
} | |
@Override | |
public void onResume() { | |
super.onResume(); | |
} | |
private void setAppearance() { | |
refreshLayout.setColorScheme(android.R.color.holo_blue_bright, | |
android.R.color.holo_green_light, | |
android.R.color.holo_orange_light, | |
android.R.color.holo_red_light); | |
} | |
@Override | |
public void onRefresh() { | |
new Handler().postDelayed(new Runnable() { | |
@Override public void run() { | |
refreshLayout.setRefreshing(false); | |
} | |
}, 5000); | |
} | |
@Override | |
public void onDismiss(AbsListView absListView, int[] ints) { | |
} | |
/** | |
* Listener which handles the endless list. It is responsible for | |
* determining when the long service will be called asynchronously. | |
*/ | |
class EndlessListScrollListener implements OnScrollListener { | |
@Override | |
public void onScroll(AbsListView view, int firstVisibleItem, | |
int visibleItemCount, int totalItemCount) { | |
boolean loadMore = /* maybe add a padding */ | |
firstVisibleItem + visibleItemCount >= totalItemCount; | |
if(pages!=null & adapter!=null && scroll){ | |
if(loadMore) { | |
// It is time to add new data. We call the listener | |
getListView().addFooterView(footer); | |
new RequestTask().execute("http://www.businessbook.pro/api/v1/profils.json?limit=2&offset="+(offset+=2)); | |
// getActivity().runOnUiThread(new Runnable() { | |
// public void run() { | |
// //adapter.notifyDataSetChanged(); | |
// mHandler.postDelayed(mAddItemsRunnable, 1); | |
// } | |
// }); | |
} | |
} | |
} | |
@Override | |
public void onScrollStateChanged(AbsListView view, int scrollState) { | |
} | |
} | |
class RequestTask extends AsyncTask<String, String, String>{ | |
@Override | |
protected String doInBackground(String... uri) { | |
android.os.Debug.waitForDebugger(); | |
try { | |
scroll = false; | |
HttpHeaders requestHeaders = new HttpHeaders(); | |
List<MediaType> acceptableMedia = new ArrayList<MediaType>(); | |
acceptableMedia.add(MediaType.APPLICATION_JSON); | |
requestHeaders.setAccept(acceptableMedia); | |
HttpEntity< ?> requestEntity = new HttpEntity<Object>(requestHeaders); | |
RestTemplate restTemplate = new RestTemplate(); | |
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); | |
ResponseEntity<Profil[]> responseEntity = restTemplate.exchange(uri[0], HttpMethod.GET, requestEntity, Profil[].class); | |
pagesToAdd = new LinkedList(Arrays.asList(responseEntity.getBody())); | |
} catch (Exception e) { | |
e.printStackTrace(); | |
} | |
return null; | |
} | |
@Override | |
protected void onPostExecute(String result) { | |
super.onPostExecute(result); | |
android.os.Debug.waitForDebugger(); | |
pages.addAll(pagesToAdd); | |
pages.size(); | |
//mHandler.postDelayed(mAddItemsRunnable, 1); | |
if(pagesToAdd.size()>0){ | |
adapter.addMoreItems(2, pages); | |
getListView().removeFooterView(footer); | |
scroll = true; | |
} | |
else { | |
scroll = false; | |
} | |
} | |
} | |
public void setLoadingView(int resId) { | |
LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); | |
footer = (View) inflater.inflate(resId, null); | |
this.getListView().addFooterView(footer); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment