package com.m.ui.fragment;
import java.io.Serializable;
import uk.co.senab.actionbarpulltorefresh.extras.actionbarsherlock.PullToRefreshLayout;
import uk.co.senab.actionbarpulltorefresh.library.ActionBarPullToRefresh;
import uk.co.senab.actionbarpulltorefresh.library.listeners.OnRefreshListener;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.ListView;
import android.widget.TextView;
import com.m.R;
import com.m.support.Inject.ViewInject;
import fr.castorflex.android.smoothprogressbar.SmoothProgressBar;
public abstract class ASwipeRefreshListFragment<T extends Serializable, Ts extends Serializable> extends ARefreshFragment<T, Ts, ListView>
implements OnRefreshListener {
static String TAG = "ASwipeRefreshListFragment";
@ViewInject(idStr = "listView")
ListView mListView;
protected View mFooterView;
View layLoading;
TextView txtLoadingHint;
TextView btnLoadMore;
private PullToRefreshLayout mPullToRefreshLayout;
private boolean autoLoadMore = true;
@Override
void _layoutInit(LayoutInflater inflater, Bundle savedInstanceState) {
super._layoutInit(inflater, savedInstanceState);
mFooterView = View.inflate(getActivity(), R.layout.layout_footerview, null);
layLoading = mFooterView.findViewById(R.id.layLoading);
txtLoadingHint = (TextView) mFooterView.findViewById(R.id.txtLoadingHint);
btnLoadMore = (TextView) mFooterView.findViewById(R.id.btnLoadMore);
resetRefreshView(getConfig());
mPullToRefreshLayout = new PullToRefreshLayout(getActivity());
ActionBarPullToRefresh.from(getActivity()).insertLayoutInto((ViewGroup) findViewById(refreshLayoutInfo()))
.theseChildrenArePullable(R.id.listView).listener(this).setup(mPullToRefreshLayout);
mListView.addFooterView(mFooterView);
mListView.setAdapter(getAdapter());
SmoothProgressBar mHeaderProgressBar = (SmoothProgressBar) mFooterView.findViewById(R.id.progress);
mHeaderProgressBar.setIndeterminate(true);
if (savedInstanceState == null) {
setFooterRefreshing();
}
}
@Override
public AbsListView getRefreshView() {
return mListView;
}
public int refreshLayoutInfo() {
return R.id.layoutContent;
}
@Override
public void onRefreshStarted(View view) {
requestData(RefreshMode.refresh);
}
@Override
protected int inflateContentView() {
return R.layout.layout_swiperefreshlist;
}
private ListView getListView() {
return mListView;
}
public PullToRefreshLayout getPullToRefreshLayout() {
return mPullToRefreshLayout;
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
super.onScrollStateChanged(view, scrollState);
if (scrollState == SCROLL_STATE_FLING) {
}
else if (scrollState == SCROLL_STATE_IDLE) {
if (getListView().getFooterViewsCount() == 0)
getListView().addFooterView(mFooterView);
if (getListView().getChildAt(getListView().getChildCount() - 1) == mFooterView) {
if (autoLoadMore) {
setFooterRefreshing();
onPullUpToRefresh();
}
}
}
}
public boolean setFooterRefreshing() {
layLoading.setVisibility(View.VISIBLE);
btnLoadMore.setVisibility(View.GONE);
return false;
}
@Override
public boolean setRefreshing() {
mPullToRefreshLayout.setRefreshing(true);
return false;
}
@Override
public boolean isRefreshing() {
return mPullToRefreshLayout.isRefreshing();
}
@Override
public void setRefreshViewComplete() {
if (mPullToRefreshLayout.isRefreshing())
mPullToRefreshLayout.setRefreshComplete();
}
@Override
protected void taskStateChanged(ABaseTaskState state, Serializable extra) {
super.taskStateChanged(state, extra);
if (state == ABaseTaskState.finished) {
if (mPullToRefreshLayout != null && mPullToRefreshLayout.isRefreshing()
&& layLoading.getVisibility() != View.VISIBLE)
setRefreshViewComplete();
layLoading.setVisibility(View.GONE);
btnLoadMore.setVisibility(View.VISIBLE);
}
else if (state == ABaseTaskState.prepare) {
if (loadingLayout != null && loadingLayout.getVisibility() != View.VISIBLE && mPullToRefreshLayout != null
&& layLoading.getVisibility() != View.VISIBLE) {
setRefreshing();
}
}
};
@Override
public void resetRefreshView(RefreshConfig config) {
autoLoadMore = config.canLoadMore;
if (autoLoadMore) {
layLoading.setVisibility(View.GONE);
// 没有设置文本
if (TextUtils.isEmpty(btnLoadMore.getText()))
btnLoadMore.setText(R.string.hintLoadMore);
if (TextUtils.isEmpty(txtLoadingHint.getText()))
txtLoadingHint.setText(R.string.hintLoading);
btnLoadMore.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
layLoading.setVisibility(View.VISIBLE);
btnLoadMore.setVisibility(View.GONE);
onPullUpToRefresh();
}
});
}
else {
layLoading.setVisibility(View.GONE);
btnLoadMore.setVisibility(View.VISIBLE);
btnLoadMore.setText(R.string.cannotRequestUpdate);
btnLoadMore.setOnClickListener(null);
}
}
}