zoukankan      html  css  js  c++  java
  • 下拉刷新、二维码

    下拉刷新

    • 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
    
    
  • 相关阅读:
    怎么查看京东店铺的品牌ID
    PPT编辑的时候很卡,放映的时候不卡,咋回事?
    codevs 1702素数判定2
    codevs 2530大质数
    codevs 1488GangGang的烦恼
    codevs 2851 菜菜买气球
    hdu 5653 Bomber Man wants to bomb an Array
    poj 3661 Running
    poj 1651 Multiplication Puzzle
    hdu 2476 String Painter
  • 原文地址:https://www.cnblogs.com/sixrain/p/5273982.html
Copyright © 2011-2022 走看看