package com.itbox.grzl.fragment; import handmark.pulltorefresh.library.PullToRefreshBase; import handmark.pulltorefresh.library.PullToRefreshListView; import handmark.pulltorefresh.library.PullToRefreshBase.Mode; import handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener2; import java.util.List; import com.activeandroid.ActiveAndroid; import com.activeandroid.Model; import com.activeandroid.content.ContentProvider; import com.activeandroid.query.Delete; import com.itbox.fx.core.L; 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.View; import android.widget.AdapterView; import android.widget.ListView; import android.widget.AdapterView.OnItemClickListener; public abstract class BaseLoadFragment<T extends Model> extends BaseFragment implements LoaderCallbacks<Cursor>, OnItemClickListener { protected PullToRefreshListView mListView; private int page = 1; private int oldPage = 1; private CursorAdapter mAdapter; private Class<T> mClazz; private String mOrderBy; private String mSelection; /** * 初始化加载器 * * @param listView * @param adapter * @param clazz * @param orderBy */ public void initLoad(PullToRefreshListView listView, CursorAdapter adapter, Class<T> clazz, String selection, String orderBy) { mListView = listView; mAdapter = adapter; mClazz = clazz; mSelection = selection; mOrderBy = orderBy; initView(); getActivity().getSupportLoaderManager().initLoader(getLoaderId(), null, this); loadFirstData(); } protected int getLoaderId() { return 0; } /** * 初始化加载器 * * @param listView * @param adapter * @param clazz */ public void initLoad(PullToRefreshListView listView, CursorAdapter adapter, Class<T> clazz) { initLoad(listView, 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() { // 设置刷新监听器 mListView.setOnRefreshListener(new OnRefreshListener2<ListView>() { @Override public void onPullDownToRefresh( PullToRefreshBase<ListView> refreshView) { loadFirstData(); } @Override public void onPullUpToRefresh( PullToRefreshBase<ListView> refreshView) { loadNextData(); } }); mListView.setMode(Mode.BOTH); mListView.setAdapter(mAdapter); mListView.setOnItemClickListener(this); } /** * 加载数据 */ protected abstract void loadData(int page); /** * 数据加载完毕 */ protected void loadFinish() { mListView.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 id, Bundle arg1) { return new CursorLoader(getActivity(), 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) { } }