com.zj.showgirl.GirlFragment.java Source code

Java tutorial

Introduction

Here is the source code for com.zj.showgirl.GirlFragment.java

Source

package com.zj.showgirl;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.zj.base.GirlBaseFragment;
import com.zj.fastpolice.R;
import com.zj.showgirl.adapter.GirlAdapter;
import com.zj.showgirl.adapter.GirlOnClickListener;
import com.zj.showgirl.entity.Girl;
import com.zj.showgirl.viewgirlphoto.GirlPhotoFragment;
import com.zj.utils.SnackBarUtil;

import java.util.ArrayList;
import java.util.List;

import butterknife.Bind;
import butterknife.ButterKnife;
import jp.wasabeef.recyclerview.adapters.ScaleInAnimationAdapter;

/**
 * Created by CoXier on 2016/5/2.
 */
public class GirlFragment extends GirlBaseFragment implements GirlOnClickListener, GirlContract.View {

    @Bind(R.id.recl)
    RecyclerView recyclerView;
    @Bind(R.id.swipe_refresh_layout)
    SwipeRefreshLayout swipeRefreshLayout;

    private int page = 1;
    private int limit = 10;
    private List<Girl> mGirls = new ArrayList<>();
    private GirlAdapter girlAdapter;
    private GirlContract.Presenter mPresenter = new GirlPresenter(this);

    private boolean mIsFirstTouchedBottom = true;
    private boolean mIsFirstCreated = true;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
            @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_girl, container, false);
        ButterKnife.bind(this, view);

        setRecyclerView();
        setSwipeRefreshLayout();

        // ?refresh
        swipeRefreshLayout.measure(View.MEASURED_SIZE_MASK, View.MEASURED_HEIGHT_STATE_SHIFT);
        if (mIsFirstCreated) {
            onRefresh();
        }
        swipeRefreshLayout.setOnRefreshListener(this);
        return view;
    }

    @Override
    public void setRecyclerView() {
        girlAdapter = new GirlAdapter(this, mGirls);
        recyclerView.setAdapter(new ScaleInAnimationAdapter(girlAdapter));
        StaggeredGridLayoutManager gridLayoutManager = new StaggeredGridLayoutManager(2,
                StaggeredGridLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(gridLayoutManager);
        recyclerView.addOnScrollListener(getOnBottomListener(gridLayoutManager));
    }

    @Override
    public void setSwipeRefreshLayout() {
        swipeRefreshLayout.setColorSchemeResources(R.color.refresh_process1, R.color.refresh_process2,
                R.color.refresh_process3);

    }

    @Override
    public void showMore(@Nullable List list) {
        int size = mGirls.size();
        for (Object girl : list) {
            mGirls.add((Girl) girl);
        }
        recyclerView.requestLayout();
        if (mGirls.size() - size == 10) {
            page++;
        }
    }

    @Override
    public void finishRefresh() {
        swipeRefreshLayout.setRefreshing(false);
    }

    @Override
    public void showSnackBar() {
        SnackBarUtil.showSnackBar(recyclerView, this);
    }

    @Override
    public void onRefresh() {
        if (page <= limit) {
            swipeRefreshLayout.setRefreshing(true);
            mPresenter.loadMore(page);
            mIsFirstCreated = false;
        } else {
            swipeRefreshLayout.setRefreshing(false);
        }
    }

    @Override
    public void viewGirlPhoto(Girl girl) {
        FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
        GirlPhotoFragment fragment = GirlPhotoFragment.newInstance(girl.getUrl(), girl.getDesc());
        fragment.show(fragmentManager, "fragment_girl_photo");
        fragment.setStyle(DialogFragment.STYLE_NORMAL, R.style.Dialog_FullScreen);
    }

    @Override
    public void onDestroyView() {
        ButterKnife.unbind(this);
        super.onDestroyView();
    }

    /**
     * The code segment is I learn from Meizhi created by drakeet
     * Meizhi is under the terms of the GNU General Public License as published by
     * the Free Software Foundation, either version 3 of the License, or
     * (at your option) any later version.
     */
    RecyclerView.OnScrollListener getOnBottomListener(final StaggeredGridLayoutManager layoutManager) {
        RecyclerView.OnScrollListener bottomListener = new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                int[] lastVisiblePositions = new int[2];
                lastVisiblePositions = layoutManager.findLastCompletelyVisibleItemPositions(lastVisiblePositions);
                int right = lastVisiblePositions[1];
                boolean isBottom = right > girlAdapter.getItemCount() - 7;
                if (isBottom && !swipeRefreshLayout.isRefreshing()) {
                    if (!mIsFirstTouchedBottom) {
                        onRefresh();
                    } else
                        mIsFirstTouchedBottom = false;
                }
            }
        };
        return bottomListener;
    }

    @Override
    public void setPresenter(GirlContract.Presenter presenter) {
        mPresenter = presenter;
    }

}