[置顶] 一个简易的Android基础项目

简书地址:http://www.jianshu.com/p/ef486092c750

AndroidBasicProject是一个简易的Android基础项目,方便您快速进行开发。包含以下内容: 基础的Activity、Fragment;下载管理;异常信息收集;日志打印;通用适配器;常用工具类。

Demo下载

使用步骤

第一步:

dependencies { compile 'com.classic.core:classic:1.5' }

第二步:

public class YourApplication extends Application {
  public static final String LOG_TAG = "classic";
  private static final String ROOT_DIR_NAME = "classic";

  @Override public void onCreate() {
    super.onCreate();

    //可选配置,默认目录名称:download
    SDcardUtil.setRootDirName(ROOT_DIR_NAME);
    SDcardUtil.initDir();
    //配置异常信息收集
    CrashHandler.getInstance(this);
    //日志打印配置
    Logger
        .init(LOG_TAG)                   // default PRETTYLOGGER
        .hideThreadInfo()                // default show
        //.logLevel(LogLevel.NONE) // default LogLevel.FULL
        //.methodOffset(2) // default 0
        //.logTool(new AndroidLogTool()) // custom log tool, optional
        ;
  }
}

感谢

CommonAdapter - tianzhijiexian
logger - Orhan Obut
LogUtils - pengwei1024

更新日志

v1.5
BaseActivity、BaseFragment添加initInstanceState方法,方便做一些状态的恢复操作。
BaseFragment添加onHidden方法,当前fragment被切换到后台时会执行此方法。
修复一些工具类的bug。

代码示例

Activity示例

public class TestActivity extends BaseActivity {

  @Bind(R.id.main_rv) RecyclerView recyclerView;

  private List<Demo> demos;
  private DoubleClickExitHelper doubleClickExitHelper;

  @Override public int getLayoutResId() {
    return R.layout.activity_test;
  }

  @Override public void onFirst() {
    super.onFirst();
    Logger.d("onFirst只有第一次才会执行");
    //这里可以做一些界面功能引导
  }

  /** * 方法执行顺序: * initPre() --> initInstanceState(Bundle savedInstanceState) --> * initData() --> initView() --> register() */
  @Override public void initPre() {
    super.initPre();
    //这个方法会在setContentView(...)方法之前执行
  }

  @Override public void initInstanceState(Bundle savedInstanceState) {
    super.initInstanceState(savedInstanceState);
    //这里可以做一些状态的恢复操作
  }

  @Override public void initData() {
    super.initData();
    demos = Demo.getDemos();
    Logger.object(demos);
    //双击退出应用工具类使用方法,别忘了重写onKeyDown方法(见底部)
    doubleClickExitHelper = new DoubleClickExitHelper(this);
    //.setTimeInterval(3000)
    //.setToastContent("再按一次退出demo");
  }

  @Override public void initView() {
    super.initView();
    ButterKnife.bind(this);

    recyclerView.setOnClickListener(this);
    LinearLayoutManager manager = new LinearLayoutManager(this);
    manager.setOrientation(LinearLayoutManager.VERTICAL);
    recyclerView.setLayoutManager(manager);
    //如果可以确定每个item的高度是固定的,设置这个选项可以提高性能
    recyclerView.setHasFixedSize(true);
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setAdapter(new CommonRcvAdapter<Demo>(demos) {
      @NonNull @Override public AdapterItem<Demo> getItemView(Object o) {
        return new TextItem();
      }
    });
  }

  @Override public void register() {
    super.register();
    EventUtil.registerEventBus(this);
    //这里可以注册一些广播、服务
  }

  @Override public void unRegister() {
    super.unRegister();
    ButterKnife.unbind(this);
    EventUtil.unRegisterEventBus(this);
    //注销广播、服务
  }

  @Override public void viewClick(View v) {
    switch (v.getId()){
      case R.id.main_rv:
        //点击事件处理
        break;
    }
  }
  @Override public void showProgress() {
    //需要显示进度条,可以重写此方法
  }

  @Override public void hideProgress() {
    //关闭进度条
  }

  @Override public boolean onKeyDown(int keyCode, KeyEvent event) {
    return doubleClickExitHelper.onKeyDown(keyCode, event);
  }
}

Fragment示例

public class TestFragment extends BaseFragment {

  @Override public int getLayoutResId() {
    return R.layout.fragment_test;
  }

  @Override public void onChange() {
    //当前fragment从后台被切换到前台时会执行此方法
  }

  @Override public void onHidden() {
    super.onHidden();
    //当前fragment从前台被切换到后台时会执行此方法
  }

  @Override public void onFirst() {
    super.onFirst();
    Logger.d("onFirst只有第一次才会执行");
    //这里可以做一些界面功能引导
  }

  /** * 方法执行顺序: * initInstanceState(Bundle savedInstanceState) --> * initData() --> initView(View parentView) --> register() */
  @Override public void initInstanceState(Bundle savedInstanceState) {
    super.initInstanceState(savedInstanceState);
    //这里可以做一些状态的恢复操作
  }

  @Override public void initData() {
    super.initData();
  }

  @Override public void initView(View parentView) {
    super.initView(parentView);
    ButterKnife.bind(this, parentView);
  }

  @Override public void register() {
    super.register();
    //这里可以注册一些广播、服务
  }

  @Override public void unRegister() {
    super.unRegister();
    ButterKnife.unbind(this);
    //注销广播、服务
  }

  @Override public void viewClick(View v) {
    //处理一些点击事件
    switch (v.getId()){
      case R.id.button:
        //...
        break;
      case R.id.text:
        //...
        break;
    }
  }
  @Override public void showProgress() {
    //需要显示进度条,可以重写此方法
  }

  @Override public void hideProgress() {
    //关闭进度条
  }
}

启动页示例

public class SplashActivity extends BaseSplashActivity {

  @Override protected void setSplashResources(List<SplashImgResource> resources) {
    /** * SplashImgResource参数: * mResId - 图片资源的ID。 * playerTime - 图片资源的播放时间,单位为毫秒。。 * startAlpha - 图片资源开始时的透明程度。0-255之间。 * isExpand - 如果为true,则图片会被拉伸至全屏幕大小进行展示,否则按原大小展示。 */
    resources.add(new SplashImgResource(R.mipmap.splash,1500,100f,true));
    resources.add(new SplashImgResource(R.mipmap.splash1,1500,100f,true));
    resources.add(new SplashImgResource(R.mipmap.splash2,1500,100f,true));
  }

  @Override protected boolean isAutoStartNextActivity() {
    return false;
  }
  @Override protected Class<?> nextActivity() {
    return null;
    //如果isAutoStartNextActivity设置为true,这里需要指定跳转的activity
    //return MainActivity.class;
  }

  @Override protected void runOnBackground() {
    //这里可以执行耗时操作、初始化工作
    //请注意:如果执行了耗时操作,那么启动页会等到耗时操作执行完才会进行跳转
    //try {
    // Thread.sleep(15 * 1000);
    //} catch (InterruptedException e) {
    // e.printStackTrace();
    //}
  }
}

通用适配器示例 点击查看更多介绍

  @Override public void initView() {
    LinearLayoutManager manager = new LinearLayoutManager(this);
    manager.setOrientation(LinearLayoutManager.VERTICAL);
    recyclerView.setLayoutManager(manager);
    //如果可以确定每个item的高度是固定的,设置这个选项可以提高性能
    recyclerView.setHasFixedSize(true);
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setAdapter(new CommonRcvAdapter<Demo>(demos) {
      @NonNull @Override public AdapterItem<Demo> getItemView(Object o) {
        return new TextItem();
      }
    });
  }
  private class TextItem implements AdapterItem<Demo> {

    @Override public int getLayoutResId() {
      return R.layout.activity_main_item;
    }
    private ViewHolder holder;
    private View view;
    @Override public void onBindViews(View view) {
      this.view = view;
      //在这里做findviewById的工作吧
      holder = new ViewHolder(view);
    }

    @Override public void onSetViews() {
      //这个方法仅仅在item构建时才会触发,所以在这里也仅仅建立一次监听器,不会重复建立
      holder.mainItemCardview.setOnClickListener(new View.OnClickListener() {
        @Override public void onClick(View v) {
          final int position = recyclerView.getChildAdapterPosition(v);
          itemClick(demos.get(position));
        }
      });
    }

    @Override public void onUpdateViews(Demo demo, int i) {
      // 在每次适配器getView的时候就会触发,这里避免做耗时的操作
      holder.mainItemCardview.setCardBackgroundColor(demo.bgColor);
      holder.mainItemTv.setText(demo.title);
    }

  }
  class ViewHolder {
    @Bind(R.id.main_item_tv) TextView mainItemTv;
    @Bind(R.id.main_item_cardview) CardView mainItemCardview;

    ViewHolder(View view) {
      ButterKnife.bind(this, view);
    }
  }

打印日志 点击查看更多介绍

Logger.d("hello");
Logger.e("hello");
Logger.w("hello");
Logger.v("hello");
Logger.wtf("hello");
//打印json数据
Logger.json(JSON_CONTENT);
//打印xml数据
Logger.xml(XML_CONTENT);
//打印对象(Bean,Array,Collection,Map...)
Logger.object(object);

注意事项:确保包装选项是禁用的
[置顶] 一个简易的Android基础项目_第1张图片

工具类

  • AppInfoUtil - 应用程序相关信息
  • BitmapUtil
  • CloseUtil
  • ConversionUtil - 单位转换
  • DataUtil
  • DateUtil - 日期操作
  • DeviceUtil - 设备信息
  • DoubleClickExitHelper - 双击退出应用程序
  • EditTextUtil
  • FileUtil - 文件操作
  • HtmlUtil
  • IntentUtil
  • IpUtil
  • KeyBoardUtil
  • MatcherUtil
  • MoneyUtil - 高精度数据计算
  • NetworkUtil - 网络状态
  • PackageUtil
  • ResourceUtil - 资源文件操作
  • SDcardUtil
  • SharedPreferencesUtil
  • StringUtil
  • ToastUtil
  • ViewHolder
  • WifiUtil
  • WindowUtil

你可能感兴趣的:([置顶] 一个简易的Android基础项目)