package com.itbox.grzl.activity;
import handmark.pulltorefresh.library.PullToRefreshBase;
import handmark.pulltorefresh.library.PullToRefreshBase.Mode;
import handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener2;
import handmark.pulltorefresh.library.PullToRefreshListView;
import java.util.List;
import javax.crypto.Mac;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.support.v4.widget.CursorAdapter;
import android.text.TextUtils;
import android.view.TextureView;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import com.activeandroid.ActiveAndroid;
import com.activeandroid.Model;
import com.activeandroid.content.ContentProvider;
import com.activeandroid.query.Delete;
import com.itbox.fx.net.GsonResponseHandler;
/**
* Load页面基类
*
* @author byz
* @date 2014-5-18下午6:42:12
* @param <T>
*/
public abstract class BaseLoadActivity<T extends Model> extends BaseActivity
implements LoaderCallbacks<Cursor>, OnItemClickListener {
protected PullToRefreshListView mRefreshListView;
protected ListView mListView;
private int page = 1;
private int oldPage = 1;
private CursorAdapter mAdapter;
private Class<T> mClazz;
private String mOrderBy;
private String mSelection;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
/**
* 初始化加载器
*
* @param refreshListView
* @param adapter
* @param clazz
* @param orderBy
*/
public void initLoad(ListView listView, PullToRefreshListView refreshListView, CursorAdapter adapter,
Class<T> clazz, String selection, String orderBy) {
mRefreshListView = refreshListView;
mListView = listView;
mAdapter = adapter;
mClazz = clazz;
mSelection = selection;
mOrderBy = orderBy;
initView();
getSupportLoaderManager().initLoader(0, null, this);
loadFirstData();
}
/**
* 初始化加载器
*
* @param refreshListView
* @param adapter
* @param clazz
* @param orderBy
*/
public void initLoad(PullToRefreshListView refreshListView, CursorAdapter adapter,
Class<T> clazz, String selection) {
initLoad(null, refreshListView, adapter, clazz, selection, null);
}
/**
* 初始化加载器
*
* @param ListView
* @param adapter
* @param clazz
* @param orderBy
*/
public void initLoad(ListView ListView, CursorAdapter adapter,
Class<T> clazz, String selection) {
initLoad(ListView, null, adapter, clazz, selection, null);
}
/**
* 初始化加载器
*
* @param listView
* @param adapter
* @param clazz
*/
public void initLoad(PullToRefreshListView listView, CursorAdapter adapter,
Class<T> clazz) {
initLoad(null, listView, adapter, clazz, null, null);
}
/**
* 初始化加载器
*
* @param listView
* @param adapter
* @param clazz
*/
public void initLoad(ListView listView, CursorAdapter adapter,
Class<T> clazz) {
initLoad(listView, null, adapter, clazz, null, null);
}
/**
* 加载第一页
*/
protected void loadFirstData() {
oldPage = page;
page = 1;
loadData(page);
}
/**
* 加载下一页
*/
protected void loadNextData() {
oldPage = page;
page++;
loadData(page);
}
/**
* 还原页码
*/
protected void restorePage() {
page = oldPage;
}
private void initView() {
// 设置刷新监听器
if (mRefreshListView != null) {
mRefreshListView.setOnRefreshListener(new OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(
PullToRefreshBase<ListView> refreshView) {
loadFirstData();
}
@Override
public void onPullUpToRefresh(
PullToRefreshBase<ListView> refreshView) {
loadNextData();
}
});
mRefreshListView.setMode(Mode.BOTH);
mRefreshListView.setAdapter(mAdapter);
mRefreshListView.setOnItemClickListener(this);
}
if (mListView != null) {
mListView.setAdapter(mAdapter);
mListView.setOnItemClickListener(this);
}
}
/**
* 加载数据
*/
protected abstract void loadData(int page);
/**
* 数据加载完毕
*/
protected void loadFinish() {
if (mRefreshListView != null) {
mRefreshListView.onRefreshComplete();
}
}
/**
* 保存数据
*
* @param page
* @param bean
*/
protected void saveData(int page, List<T> list) {
try {
ActiveAndroid.beginTransaction();
if (page == 1) {
try {
// 清空数据库
if (TextUtils.isEmpty(mSelection)) {
new Delete().from(mClazz).execute();
}else{
new Delete().from(mClazz).where(mSelection).execute();
}
} catch (Exception e) {
e.printStackTrace();
}
}
// 保存
if (list != null) {
for (T er : list) {
er.save();
}
}
ActiveAndroid.setTransactionSuccessful();
} catch (Exception e) {
e.printStackTrace();
} finally {
ActiveAndroid.endTransaction();
}
}
@Override
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
return new CursorLoader(this, ContentProvider.createUri(mClazz, null),
null, mSelection, null, mOrderBy);
}
@Override
public void onLoadFinished(Loader<Cursor> loder, Cursor cursor) {
// load完毕
if (cursor != null) {
mAdapter.swapCursor(cursor);
}
}
@Override
public void onLoaderReset(Loader<Cursor> arg0) {
mAdapter.swapCursor(null);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
}
public static class LoadResponseHandler<T> extends GsonResponseHandler<T>{
private BaseLoadActivity<? extends Model> mActivity;
public LoadResponseHandler(BaseLoadActivity<? extends Model> activity, Class<T> clazz) {
super(clazz);
mActivity = activity;
}
@Override
public void onFinish() {
super.onFinish();
mActivity.dismissProgressDialog();
mActivity.loadFinish();
}
@Override
public void onFailure(Throwable e, int statusCode, String content) {
super.onFailure(e, statusCode, content);
mActivity.restorePage();
if (statusCode == 400) {
return;
}
mActivity.showToast(content);
}
}
}