• 下拉刷新、二维码


    下拉刷新

    • pulltorefresh

      • 支持listview,webview,gridview,expandableListview众多控件

        1,lv_list = refreshListView.getRefreshableView();//需要拿到refreshListView这个组合控件里面的具体的listview,才可以设置adapter
        2.refreshListView.setRefreshing();//开始加载数据的时候.应该显示.正在刷新
        3.refreshListView.onRefreshComplete();//结束刷新状态
        4.  refreshListView.setOnRefreshListener(new OnRefreshListener() {
        @Override
        public void onRefresh() {
            //下拉刷新中.我们应该去重写请求数据
            initData();
            System.out.println("===setOnRefreshListener====");
        }
        });
        
    • xlistview:修改布局方便

      • 只支持listview
      • 关键方法

        xlv.setPullLoadEnable(true);//开启上拉加载更多
        xlv.setPullRefreshEnable(true);//开启下拉刷新
        xlv.stopRefresh();//停止刷新
        xlv.stopLoadMore();//停止加载更多
        xlv.setXListViewListener(new IXListViewListener() {//设置监听
        
        @Override
        public void onRefresh() {
            handler.sendMessageDelayed(new Message(), 2000);
        }
        
        @Override
        public void onLoadMore() {
            for (int i = 0; i < 100; i++) {
                String str = "这个是一个item条目 " + i;
                dataSource.add(str);
            }
            handler.sendMessageDelayed(new Message(), 2000);
        }
        });
        xlv.setRefreshTime(preUpdateTime2);//设置上次更新时间
        

    网络引擎的封装

    • 不通网络请求封装到CloudEngine.class中,以方法的形式暴露;
    • 所有网络请求结果的处理.通过接口方法回调回来;

    接口回调

    • handler机制+thread
    • 怎么理解接口回调-->接口回调就是一个通知机制
    • 作用:1.单纯的通知 2.通知+传值
    • 步骤:
      • 1.定义接口,以及接口方法
      • 2.定义接口对象
      • 3.在某一个地方.接口对象调用接口方法
      • 4.暴露接口对象(构造方法,setter方法)

    AsyncTask

    基本使用

    onPre
    doInbackGroup
    onpost
    

    AsyncTask源码分析

    private static final int CORE_POOL_SIZE = 5;        //核心线程数
    private static final int MAXIMUM_POOL_SIZE = 128;   //最大线程数
    private static final int KEEP_ALIVE = 1;            //超时时间,当线程数超过核心线程数时,超过这个时间的空线程就会被销毁,直到线程数等于核心线程 
    

    AsyncTask缺陷

    • 1.同时只有5个线程去访问网络-->这个是重点
    • 2.线程数目超过128,会抛异常-->这个情况其实还好;

    AsyncTask版本差异

    • COREPOOLSIZE MAXIMUM_POOLSIZE KEEPALIVE在不同的版本上.值是不一样;
    • 1.5前是串行执行的.每次执行1个任务
    • 1.6-2.3之前的版本.是并行执行的.每次执行5个任务
    • 3.0后提供串行和并行,默认情况是串行

      executeOnExecutor(AsyncTask.SERIAL_EXECUTOR, null);//串行
      executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, null);//并行
      

    AsyncTask简单封装

    实际开发我们会去继承Asynctask

    AsyncTask函数化的封装,AsyncTask函数式的调用

    接口回调实例

        //1.
        public static interface OnCheckedChangeListener {
        void onCheckedChanged(CompoundButton buttonView, boolean isChecked);
       }
        //2.
        private OnCheckedChangeListener mOnCheckedChangeListener;
        //3.
        mOnCheckedChangeListener.onCheckedChanged(this, mChecked);
        //4.
         public void setOnCheckedChangeListener(OnCheckedChangeListener listener) {
        mOnCheckedChangeListener = listener;
        }
    

    全局异常处理

    • 方法定义的地方.统一抛出基类

      /**
       *  这个是一个会抛出异常b的方法
       * @throws HMException
       * @throws HMException
       */
      public static void methodB() throws HMException {
          //如果在某一个时刻.出现了异常啊.
          //出现状态的是子类.抛出的是父类.
          throw new HMBException();//主动抛异常
      }
      
    • 方法使用的地方,try catch基类

      try {
                  Api.methodB();
              } catch (HMException e) {
                  handleException(e);
      }
      
    • 提示信息具体化

      /**
       * 不同异常子类用不同的code表示
       * @param e
       * @return
       */
      public static int exception2code(HMException e) {
      int errCode = 0;
      if (e instanceof HMAException) {
          errCode = 1;
      } else if (e instanceof HMBException) {
          errCode = 2;
      } else if (e instanceof HMCException) {
          errCode = 3;
      } else if (e instanceof HMDException) {
          errCode = 4;
      }
      return errCode;
      }
      
      /**
       * 根据不同的异常信息.显示不同的效果
       * @param e
       */
      public void handleException(HMException e) {
          int exception2code = ExceptionHandler.exception2code(e);
          String code2String = ExceptionHandler.code2String(exception2code);
          Toast.makeText(getApplicationContext(), code2String, 0).show();
      }
      

    actionbarsherlock

    actionBar版本兼容库.我们可以在2.1以下也是用actionbar

        actionBar = getSupportActionBar();//得到actionbar,
        actionBar.setDisplayHomeAsUpEnabled(true);//是否显示返回箭头,默认情况是false,
        //如果setDisplayShowHomeEnabled setDisplayShowTitleEnabled 都是false,那么退回图标设置为true/false都不见
        actionBar.setDisplayShowHomeEnabled(false);//是否显示logo,默认是true
        actionBar.setDisplayShowTitleEnabled(true);//是否显示title,默认是true
    
        //      actionBar.setTitle("56期");//修改title
        //      actionBar.setIcon(R.drawable.icon_download);//修改logo
    

    几个actionBar的区别

    • actionbarsherlock->actionbar-->都支持-->2.1以下系统还得使用,actionbarsherlock提供了很多的样式;
    • v7-->actionbar-->2.1以上的系统可以支持
    • android sdk->actionbar-->3.0以上的手机支持

    v4 v7 v13

    • v4:兼容api level4(android 1.6)以上的系统
    • v7:兼容api level7(android 2.1)以上的系统
    • v13:兼容api level3(android 3.2)以上的系统

    二维码历史性的东西

    使用zxing包,qrcode

    二维码的精简

    以前很长一段时间.关于zxing包的精简是比较火.

    二维码横竖屏切换

    图片横着切

    二维码动画

    仿微信扫描效果

    使用zxing扫描二维码

    认识二维码

    • 二维码的范围
    • 二维码容错级别
    • 二维码嵌入logo

    使用

    先找到按钮,然后调用
    //1.启动扫描界面
                Intent intent = new Intent(MainActivity.this, CaptureActivity.class);
                startActivityForResult(intent, SCANNIN_GREQUEST_CODE);
    // 2.处理扫描结果
    /**
     * 
     * @param result
     * @param barcode
     */
    public void handleDecode(Result result, Bitmap barcode) {
        inactivityTimer.onActivity();
        playBeepSoundAndVibrate();
    
        // 扫描结果
        String resultString = result.getText();
    
        if (resultString.equals("")) {
            Toast.makeText(CaptureActivity.this, "Scan failed!", Toast.LENGTH_SHORT).show();
        } else {
            //2.传递扫描结果
            Intent resultIntent = new Intent();
            Bundle bundle = new Bundle();
            bundle.putString("result", resultString);
            bundle.putParcelable("bitmap", barcode);
            resultIntent.putExtras(bundle);
            this.setResult(RESULT_OK, resultIntent);
        }
        CaptureActivity.this.finish();
    }
    
    //3.收到回传的 结果
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
        case SCANNIN_GREQUEST_CODE:
            if (resultCode == RESULT_OK) {
                Bundle bundle = data.getExtras();
                //显示扫描到的内容
                tv_result.setText(bundle.getString("result"));
                //显示
                iv_qrcode.setImageBitmap((Bitmap) data.getParcelableExtra("bitmap"));
            }
            break;
        }
    }
    

    友盟

    多渠道打包可以用友盟工具、ant、gradle
    
    
  • 相关阅读:
    微信公众平台开发(51)会员卡
    iOS UIViewController的瘦身计划
    NSProxy
    Xcode
    NSPredicate
    NSArray、NSDictionary
    iOS Runtime
    iOS UmbrellaFramework
    iOS UmbrellaHeader
    iOS OCR
  • 原文地址:https://www.cnblogs.com/sixrain/p/5273982.html
Copyright © 2020-2023  润新知