1.BaseFragment
package com.example.administrator.smartbj.fragment;
import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.example.administrator.smartbj.activity.MainActivity;
/**
* 作者:Created by Kevin on 2016/1/13.
* 邮箱:haowei0708@163.com
* 描述:fragment的基类
*/
public abstract class BaseFragment extends Fragment {
public Activity mActivity;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mActivity = getActivity();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return initView();
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
initData();
initListener();
}
public abstract View initView();
public void initData(){
}
public void initListener() {
}
}
2.日志输出工具类LogUtil
import android.util.Log;
public class LogUtils {
/** 日志输出级别NONE */
public static final int LEVEL_NONE = 0;
/** 日志输出级别V */
public static final int LEVEL_VERBOSE = 1;
/** 日志输出级别D */
public static final int LEVEL_DEBUG = 2;
/** 日志输出级别I */
public static final int LEVEL_INFO = 3;
/** 日志输出级别W */
public static final int LEVEL_WARN = 4;
/** 日志输出级别E */
public static final int LEVEL_ERROR = 5;
/** 日志输出时的TAG */
private static String mTag = "googleplay";
/** 是否允许输出log */
private static int mDebuggable = LEVEL_ERROR;
/** 用于记时的变量 */
private static long mTimestamp = 0;
/** 以级别为 d 的形式输出LOG */
public static void v(String msg) {
if (mDebuggable >= LEVEL_VERBOSE) {
Log.v(mTag, msg);
}
}
/** 以级别为 d 的形式输出LOG */
public static void d(String msg) {
if (mDebuggable >= LEVEL_DEBUG) {
Log.d(mTag, msg);
}
}
/** 以级别为 i 的形式输出LOG */
public static void i(String msg) {
if (mDebuggable >= LEVEL_INFO) {
Log.i(mTag, msg);
}
}
/** 以级别为 w 的形式输出LOG */
public static void w(String msg) {
if (mDebuggable >= LEVEL_WARN) {
Log.w(mTag, msg);
}
}
/** 以级别为 w 的形式输出Throwable */
public static void w(Throwable tr) {
if (mDebuggable >= LEVEL_WARN) {
Log.w(mTag, "", tr);
}
}
/** 以级别为 w 的形式输出LOG信息和Throwable */
public static void w(String msg, Throwable tr) {
if (mDebuggable >= LEVEL_WARN && null != msg) {
Log.w(mTag, msg, tr);
}
}
/** 以级别为 e 的形式输出LOG */
public static void e(String msg) {
if (mDebuggable >= LEVEL_ERROR) {
Log.e(mTag, msg);
}
}
/** 以级别为 e 的形式输出Throwable */
public static void e(Throwable tr) {
if (mDebuggable >= LEVEL_ERROR) {
Log.e(mTag, "", tr);
}
}
/** 以级别为 e 的形式输出LOG信息和Throwable */
public static void e(String msg, Throwable tr) {
if (mDebuggable >= LEVEL_ERROR && null != msg) {
Log.e(mTag, msg, tr);
}
}
/** 以级别为 e 的形式输出msg信息,附带时间戳,用于输出一个时间段结束点* @param msg 需要输出的msg */
public static void elapsed(String msg) {
long currentTime = System.currentTimeMillis();
long elapsedTime = currentTime - mTimestamp;
mTimestamp = currentTime;
e("[Elapsed:" + elapsedTime + "]" + msg);
}
}
3.UIUtils
import android.content.Context;
import android.content.res.Resources;
import android.os.*;
import com.example.administrator.googleplay.base.BaseApplication;
/**
* 作者:Created by Kevin on 2016/1/24.
* 邮箱:haowei0708@163.com
* 描述:UI相关的工具类
*/
public class UIUtils {
public static String getPackageName() {
return getContext().getPackageName();
}
/**
* 得到上下文
* @return
*/
public static Context getContext() {
return BaseApplication.getContext();
}
/**
* 得到Resources对象
* @return
*/
public static Resources getResoure(){
return getContext().getResources();
}
/**
* 得到String.xml中的字符串
* @param resId
* @return
*/
public static String getString(int resId) {
return getResoure().getString(resId);
}
/**
* 得到String.xml中的字符串数组
* @param resId
* @return
*/
public static String[] getStringArr(int resId) {
return getResoure().getStringArray(resId);
}
/**
* 得到Color.xml中的颜色
* @param colorId
* @return
*/
public static int getColor(int colorId) {
return getResoure().getColor(colorId);
}
/**
* 得到当前主线程ID
* @return
*/
public static long getMainThreadId(){
return BaseApplication.getMainThreadId();
}
/**
* 得到主线程的Handler
* @return
*/
public static Handler getMainThreadHandler(){
return BaseApplication.getHandler();
}
/**
* 安全的执行一个任务
* @param task
*/
public static void postSafely(Runnable task){
int curThreadId = android.os.Process.myTid();
if (curThreadId == getMainThreadId()){
task.run();
}else {
getMainThreadHandler().post(task);
}
}
}
4.线程池
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
* 作者:Created by Kevin on 2016/1/27.
* 邮箱:haowei0708@163.com
* 描述:创建线程,执行任务,提交任务
*/
public class ThreadPoolProxy {
ThreadPoolExecutor mExecutor;
int mCorePoolSize;
int mMaximumPoolSize;
long mKeepAliveTime;
public ThreadPoolProxy(int CorePoolSize, int MaximumPoolSize, long KeepAliveTime) {
this.mCorePoolSize = CorePoolSize;
this.mMaximumPoolSize = MaximumPoolSize;
this.mKeepAliveTime = KeepAliveTime;
}
private ThreadPoolExecutor initThreadPoolExecutor() {
if (mExecutor == null) {
synchronized (ThreadPoolProxy.class) {
if (mExecutor == null) {
TimeUnit unit = TimeUnit.MILLISECONDS;
BlockingQueue<Runnable> workQueue = new LinkedBlockingDeque<>();
ThreadFactory threadFactory = Executors.defaultThreadFactory();
RejectedExecutionHandler handler = new ThreadPoolExecutor.AbortPolicy();
mExecutor = new ThreadPoolExecutor(mCorePoolSize, mMaximumPoolSize, mKeepAliveTime, unit, workQueue, threadFactory, handler);
}
}
}
return mExecutor;
}
/**
* 执行任务
*/
public void execute(Runnable task) {
initThreadPoolExecutor();
mExecutor.execute(task);
}
/**
* 提交任务
*/
public Future<?> submit(Runnable task) {
initThreadPoolExecutor();
return mExecutor.submit(task);
}
/**
* 移除任务
*/
public void removeTask(Runnable task) {
initThreadPoolExecutor();
mExecutor.remove(task);
}
}
5.线程池工厂
import com.example.administrator.googleplay.manager.ThreadPoolProxy;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
* 作者:Created by Kevin on 2016/1/27.
* 邮箱:haowei0708@163.com
* 描述:线程池的工厂
*/
public class ThreadPoolFactory {
static ThreadPoolProxy mNormalPool;
static ThreadPoolProxy mDownloadPool;
public static ThreadPoolProxy getNormalPool() {
if (mNormalPool == null) {
synchronized (ThreadPoolProxy.class) {
if (mNormalPool == null) {
mNormalPool = new ThreadPoolProxy(5, 5, 3000);
}
}
}
return mNormalPool;
}
public static ThreadPoolProxy getDownloadPool() {
if (mDownloadPool == null) {
synchronized (ThreadPoolProxy.class) {
if (mDownloadPool == null) {
mDownloadPool = new ThreadPoolProxy(3, 3, 3000);
}
}
}
return mDownloadPool;
}
}
6.BaseAdapter的封装
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
public abstract class CommonAdapter<T> extends BaseAdapter {
protected List<T> mDatas;
protected LayoutInflater mInflater;
protected Context mContext;
protected int layoutId;
public CommonAdapter(Context ctx,List<T> lists,int layoutId){
this.mDatas=lists;
mInflater=(LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.mContext=ctx;
this.layoutId=layoutId;
}
@Override
public int getCount() {
return mDatas.size();
}
@Override
public Object getItem(int position) {
return mDatas.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder vh=ViewHolder.getViewHolder(convertView, mContext, parent, layoutId, position);
convert(vh, mDatas.get(position));
return vh.getConvertView();
}
abstract protected void convert(ViewHolder vh,T item);
}
7.ViewHolder
import android.content.Context;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
/**
* ViewHolder的封装
*/
public class ViewHolder {
private final SparseArray<View> mView;
private View mConvertView;
public ViewHolder(Context context, ViewGroup parent, int layoutId, int position){
this.mView=new SparseArray<View>();
mConvertView = LayoutInflater.from(context).inflate(layoutId, parent, false);
mConvertView.setTag(this);
};
/**
* 获得viewholder
* @param convertView
* @param context
* @param parent
* @param layoutId
* @param position
* @return
*/
public static ViewHolder getViewHolder(View convertView,Context context,ViewGroup parent, int layoutId, int position){
if(null==convertView){
return new ViewHolder(context, parent, layoutId, position);
}
return (ViewHolder) convertView.getTag();
}
/**
* @param id
* @return
*/
public <T extends View> T getView(int id){
View view=mView.get(id);
if(null==view){
view=mConvertView.findViewById(id);
mView.put(id,view);
}
return (T)view;
}
public View getConvertView(){
return mConvertView;
}
}