BaseLoadFragment.java 5.72 KB
package com.cnlive.goldenline.ui.base;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;

import com.cnlive.goldenline.R;
import com.cnlive.goldenline.ui.widget.pull2refresh.PullToRefreshLayout;
import com.cnlive.goldenline.util.LogUtils;

import butterknife.BindView;
import butterknife.ButterKnife;
import retrofit.Callback;

/**
 * Created by zuoxian on 15/9/7.
 */
public abstract class BaseLoadFragment<T> extends BaseFragment implements Callback<T> {

    private static final String TAG = "BaseLoadFragment";

    protected T mPageData;
    protected boolean isLoading;
    protected boolean mIsPullToRefresh = false;
    protected boolean enableLoadMore = false;


    @Nullable
    @BindView(R.id.empty_load)
    protected LinearLayout mEmptyProgressbar;


    @Nullable
    @BindView(R.id.empty_button)
    protected Button mEmptyButton;

    @Nullable
    @BindView(R.id.pull_to_refresh)
    protected PullToRefreshLayout mPullToRefreshLayout;
    @Nullable
    @BindView(R.id.empty)
    public RelativeLayout mEmptyView;

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        LogUtils.LOGE(TAG + " onActivityCreated ");
        if (mPageData == null) {
            mIsPullToRefresh = false;
            onLoadData();
        } else {
            onInitLoadData(mPageData);
        }

//        if (mPullToRefreshLayout != null) {
//            LogUtils.LOGE(TAG + " mPullToRefreshLayout = " + mPullToRefreshLayout);
////            if (!enableLoadMore) {
////                LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(
////                        Context.LAYOUT_INFLATER_SERVICE);
////                mPullToRefreshLayout.setCustomLoadmoreView(inflater.inflate(R.layout.empty_view, null));
////            }
//            mPullToRefreshLayout.setOnPullListener(new PullToRefreshLayout.OnPullListener() {
//                @Override
//                public void onRefresh(PullToRefreshLayout pullToRefreshLayout) {
//                    LogUtils.LOGE(TAG + " onRefresh ");
//                    mIsPullToRefresh = true;
//                    onLoadData();
//                }
//
//                @Override
//                public void onLoadMore(PullToRefreshLayout pullToRefreshLayout) {
//                    LogUtils.LOGE(TAG + " onLoadMore ");
//                    mPullToRefreshLayout.loadmoreFinish(PullToRefreshLayout.SUCCEED);
//                    onLoadData();
//                }
//            });
//        }
    }

    protected abstract void onLoadData();

    protected abstract void onInitLoadData(T pageData);

    //    protected abstract void onLoadMoreData();


    protected void setPageData(T page_data) {
        this.mPageData = page_data;
        onInitLoadData(page_data);
    }

    protected void showLoad() {
        if (getAttchActivity() == null) return;
        if (mPageData != null) return;
        if (mEmptyView != null) mEmptyView.setVisibility(View.VISIBLE);
        if (mEmptyProgressbar != null) mEmptyProgressbar.setVisibility(View.VISIBLE);
        if (mEmptyButton != null) mEmptyButton.setVisibility(View.GONE);
    }

    protected void showConnectionRetry() {

        if (getAttchActivity() == null) return;
        if (mPageData != null) return;
        if (mEmptyView != null) mEmptyView.setVisibility(View.VISIBLE);
        if (mEmptyProgressbar != null) mEmptyProgressbar.setVisibility(View.GONE);
        if (mEmptyButton != null) {
            mEmptyButton.setText(getAttchActivity().getString(R.string.load_retry));
            mEmptyButton.setVisibility(View.VISIBLE);
            mEmptyButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    mIsPullToRefresh = false;
                    showLoad();
                    onLoadData();
                }
            });
        }
    }


    protected void hideEmptyView() {
        if (mEmptyView != null)
            mEmptyView.setVisibility(View.GONE);
    }

    protected void onRefreshCallback(boolean succeed) {
//        LogUtils.LOGE(TAG + " onRefreshCallback succeed = " + succeed + " mEmptyView = " + mEmptyView + " mPullToRefreshLayout = " + mPullToRefreshLayout);
        if (succeed && mEmptyView != null) mEmptyView.setVisibility(View.GONE);
        if (mIsPullToRefresh && mPullToRefreshLayout != null) {
            if (succeed) {
                mPullToRefreshLayout.refreshFinish(PullToRefreshLayout.SUCCEED);
            } else {
                mPullToRefreshLayout.refreshFinish(PullToRefreshLayout.FAIL);
            }
        }
    }

    protected void onLoadMoreCallback(boolean succeed) {
        if (mPullToRefreshLayout != null) {
            if (succeed) {
                mPullToRefreshLayout.loadmoreFinish(PullToRefreshLayout.SUCCEED);
            } else {
                mPullToRefreshLayout.loadmoreFinish(PullToRefreshLayout.FAIL);
            }
        }
    }

    public void setEnableRefresh() {
        if (mPullToRefreshLayout != null)
            mPullToRefreshLayout.setPullDownEnable(false);
    }

    public void setEnableLoadMore(boolean flag) {
        enableLoadMore = flag;
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // TODO: inflate a fragment view
        View rootView = super.onCreateView(inflater, container, savedInstanceState);
        ButterKnife.bind(this, rootView);
        return rootView;
    }

}