Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.fatos.fatos_desconhecidos.app.fragment;
- import android.content.Context;
- import android.os.AsyncTask;
- import android.os.Bundle;
- import android.os.Handler;
- import android.support.v4.app.Fragment;
- import android.support.v4.app.FragmentTransaction;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.AbsListView;
- import android.widget.AbsListView.OnScrollListener;
- import android.widget.AdapterView;
- import android.widget.Button;
- import android.widget.ListView;
- import android.widget.RelativeLayout;
- import android.widget.TextView;
- import android.widget.Toast;
- import com.fatos.fatos_desconhecidos.app.R;
- import com.fatos.fatos_desconhecidos.app.adapter.FeedAdapter;
- import com.fatos.fatos_desconhecidos.app.core.fragment.ErrorFragment;
- import com.fatos.fatos_desconhecidos.app.core.model.impl.Feed;
- import com.fatos.fatos_desconhecidos.app.utils.FirstItemScrollListener.OnFirstItemVisible;
- import com.parse.FindCallback;
- import com.parse.ParseException;
- import com.parse.ParseObject;
- import com.parse.ParseQuery;
- import uk.co.senab.actionbarpulltorefresh.extras.actionbarcompat.PullToRefreshLayout;
- import uk.co.senab.actionbarpulltorefresh.library.ActionBarPullToRefresh;
- import uk.co.senab.actionbarpulltorefresh.library.Options;
- import uk.co.senab.actionbarpulltorefresh.library.listeners.OnRefreshListener;
- import java.util.ArrayList;
- import java.util.List;
- public class FeedFragment extends Fragment implements OnScrollListener {
- private int limit = 0;
- private boolean hasFilter = false;
- private String mFilter;
- private ListView mListView;
- private FeedAdapter adapter;
- private RelativeLayout mFeedLoader;
- private TextView mTooLongMessage;
- private Button mTryAgain;
- private List<Feed> items = new ArrayList<Feed>();
- private PullToRefreshLayout mPullToRefreshLayout;
- private Context mContext;
- protected OnFirstItemVisible mScrollListener;
- private View mFooterView;
- private boolean mIsLoading = false;
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- View view = inflater.inflate(R.layout.fragment_feed, container, false);
- mListView = (ListView) view.findViewById(R.id.listView_feed);
- mFooterView = inflater.inflate(R.layout.footer_listview, null, false);
- mPullToRefreshLayout = (PullToRefreshLayout) view.findViewById(R.id.ptr_layout);
- mFeedLoader = (RelativeLayout) view.findViewById(R.id.feed_loader);
- mTooLongMessage = (TextView) view.findViewById(R.id.loading_text);
- mTryAgain = (Button) view.findViewById(R.id.try_again);
- return view;
- }
- @Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
- super.onViewCreated(view, savedInstanceState);
- final String[] mArray = getResources().getStringArray(R.array.navigation_drawer_items);
- final Bundle extras = getArguments();
- mContext = getActivity();
- mListView.addFooterView(mFooterView);
- mListView.setOnScrollListener(this);
- verifyExtras(extras, mArray);
- mTryAgain.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- getFeed();
- }
- });
- if(mFeedLoader.getVisibility() == View.VISIBLE) {
- showTooLongMessage();
- }
- ActionBarPullToRefresh.from(getActivity())
- .allChildrenArePullable()
- .options(Options.create().scrollDistance(.20f).build())
- .listener(new OnRefreshListener() {
- @Override
- public void onRefreshStarted(View view) {
- verifyExtras(extras, mArray);
- mListView.addFooterView(mFooterView);
- limit = 0;
- }
- }).setup(mPullToRefreshLayout);
- }
- private void verifyExtras(Bundle extras, String[] mArray) {
- if(extras.getString("extra") != null) {
- mFilter = extras.getString("extra");
- }
- if (mFilter != null) {
- if (mFilter.equals(mArray[0])) {
- mFilter = null;
- getFeed();
- } else {
- mFilter = extras.getString("extra");
- getFeedFilter(mFilter);
- }
- } else {
- getFeed();
- }
- }
- private class LoadMore extends AsyncTask<Void, Void, Void> {
- @Override
- protected Void doInBackground(Void... voids) {
- try {
- if (isCancelled()) {
- return null;
- }
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- }
- ParseQuery<ParseObject> query = ParseQuery.getQuery("FeedPost");
- query.orderByDescending("createdAt");
- if(mFilter != null) {
- query.whereContains("Type", mFilter);
- }
- query.setLimit(5);
- query.setSkip(limit = limit + 5);
- query.findInBackground(new FindCallback<ParseObject>() {
- @Override
- public void done(List<ParseObject> responseList, ParseException e) {
- if (e == null) {
- for(int i = 0; i < responseList.size(); i++) {
- items.add(new Feed(responseList.get(i).getObjectId(),
- responseList.get(i).getString("Title"),
- responseList.get(i).getString("Description"),
- responseList.get(i).getString("CompleteText"),
- responseList.get(i).getString("imageURL"),
- responseList.get(i).getString("Link_on_Site")));
- }
- mIsLoading = false;
- }
- }
- });
- } catch (Exception e) {
- e.printStackTrace();
- }
- return null;
- }
- @Override
- protected void onPostExecute(Void result) {
- super.onPostExecute(result);
- try {
- mListView.removeFooterView(mFooterView);
- adapter.notifyDataSetChanged();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- public void getFeed() {
- try {
- ParseQuery<ParseObject> query = ParseQuery.getQuery("FeedPost");
- query.orderByDescending("createdAt");
- query.setLimit(5);
- query.findInBackground(new FindCallback<ParseObject>() {
- public void done(List<ParseObject> responseList, ParseException e) {
- if (e == null) {
- hideLoad();
- items = new ArrayList<Feed>();
- for(int i = 0; i < responseList.size(); i++) {
- items.add(new Feed(responseList.get(i).getObjectId(),
- responseList.get(i).getString("Title"),
- responseList.get(i).getString("Description"),
- responseList.get(i).getString("CompleteText"),
- responseList.get(i).getString("imageURL"),
- responseList.get(i).getString("Link_on_Site")));
- }
- adapter = new FeedAdapter(getActivity(), items);
- adapter.notifyDataSetChanged();
- mListView.setAdapter(adapter);
- endLoad();
- } else {
- //TODO: Show Error
- }
- }
- });
- } catch (Exception e) {
- //TODO: Show hard Error
- }
- }
- private void showTooLongMessage() {
- new Handler().postDelayed(new Runnable() {
- @Override
- public void run() {
- try {
- mTooLongMessage.setText(getString(R.string.too_slow));
- mTryAgain.setVisibility(View.VISIBLE);
- } catch (Exception e) {
- showTooLongMessage();
- }
- }
- }, 5000);
- }
- private void hideLoad() {
- mFeedLoader.setVisibility(View.GONE);
- mPullToRefreshLayout.setVisibility(View.VISIBLE);
- }
- protected void endLoad() {
- if (isAdded() && (!isRemoving())) {
- mPullToRefreshLayout.setRefreshComplete();
- }
- }
- private void getFeedFilter(String filter) {
- ParseQuery<ParseObject> query = ParseQuery.getQuery("FeedPost");
- query.whereContains("Type", filter);
- query.setLimit(5);
- query.findInBackground(new FindCallback<ParseObject>() {
- public void done(List<ParseObject> responseList, ParseException e) {
- if (e == null) {
- hideLoad();
- items = new ArrayList<Feed>();
- for(int i = 0; i < responseList.size(); i++) {
- items.add(new Feed(responseList.get(i).getObjectId(),
- responseList.get(i).getString("Title"),
- responseList.get(i).getString("Description"),
- responseList.get(i).getString("CompleteText"),
- responseList.get(i).getString("imageURL"),
- responseList.get(i).getString("Link_on_Site")));
- }
- if(items.size() <= 0) {
- System.out.println("Error s");
- ErrorFragment errorFragment = new ErrorFragment();
- FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
- transaction.replace(R.id.fragment_placeholder, errorFragment, "A");
- transaction.addToBackStack(null);
- transaction.commit();
- } else {
- adapter = new FeedAdapter(getActivity(), items);
- adapter.notifyDataSetChanged();
- mListView.setAdapter(adapter);
- endLoad();
- }
- } else if(responseList.size() <= 0) {
- System.out.println("Error 0");
- } else {
- System.out.println("Error 1");
- }
- }
- });
- }
- @Override
- public void onScrollStateChanged(AbsListView absListView, int i) {
- }
- @Override
- public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
- try {
- if(firstVisibleItem+visibleItemCount == totalItemCount && totalItemCount!=0)
- {
- if(!mIsLoading) {
- if(mListView.getFooterViewsCount() >= 0) {
- mListView.addFooterView(mFooterView);
- }
- new LoadMore().execute();
- mIsLoading = true;
- System.out.println("LoadMore");
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment