Contents
  1. 1. 2015-09-14
    1. 1.1. 如何解决多个按钮同时点击的bug
    2. 1.2. 将程序设置成无标题栏,自己定义Actionbar
  2. 2. 2015-09-10
    1. 2.1. 设置EditText默认不弹出小键盘
  3. 3. 2015-09-15
    1. 3.1. 复制布局文件时,有自定义view,要注意改其包名。
  4. 4. 2015-09-16
    1. 4.1. 如何将Activity的数据传到Fragment(解决Activity传值到Viewpager的Fragment里面)
  5. 5. 2015-09-17
    1. 5.0.1. 一般修改完信息之后,需要回调设置数据(在onActivityResult中设置显示)
  • 6. 2015-09-23 13:14:20
    1. 6.0.1. 时间戳
  • 7. 2015-09-23 13:14:20
    1. 7.0.1. DatePicker 初始化日期
  • 8. 2015-09-25 10:47:40
    1. 8.0.1. TextView显示字数限制必须小于服务端的字数限制
  • 9. 2015-09-30 17:57:46
    1. 9.0.1. 获取屏幕分辨率的宽高
  • 10. 2015-10-01 09:01:47
    1. 10.0.1. 震动和声音
  • 11. 2015-10-02 15:37:41
    1. 11.0.1. 版本更新实际开发
  • 12. 2015-10-03 10:33:48
    1. 12.0.1. setEnable、setClickable的区别
  • 13. 2015-10-13 10:22:08
    1. 13.0.1. Application的理解
  • 14. 2015/11/5 16:49:38
    1. 14.0.1. 请求不同类别的同一数据,数据下拉加载后,必须要将请求页置1
  • 15. 2015/11/16 23:03:01
    1. 15.0.1. 二维码扫描功能开发
  • 15.1. getParentFragment()不是获取当前Fragment,获取当前Fragment直接用 Fragment.this
  • 16. 2015/11/25 22:39:31
    1. 16.1. EditText 只读内容滚动
  • 17. 2015/12/2 11:10:21
    1. 17.1. 底部tags check效果设置
  • 18. 2015/12/2 9:30:29
    1. 18.1. Checkbox实际开发
  • 19. 2015/12/2 15:25:27
    1. 19.1. 去除字符串最后一个字符
  • 20. 2015/12/3 17:10:53
    1. 20.1. Gson实体不能有重复的字段出现
  • 21. 2015/12/8 9:35:56
    1. 21.1. 多次请求导致后面请求无效的bug
  • 22. 2015/12/8 11:24:29
    1. 22.1. 写完点击事件还不能点击的bug
  • 23. 2015/12/18 9:21:45
    1. 23.1. 进入页面处理完后回调的方法
  • 2015-09-14

    如何解决多个按钮同时点击的bug

    1. 定义一个全局变量isClick。
    2. 在switch的每个case里判断isClick,执行完 设置isClick为false。
    3. 重写Activity的onResume方法,设置isClick为true。

    将程序设置成无标题栏,自己定义Actionbar

    1. 创建一个布局文件,里面只有一个RelativeLayout 设置高度为45-50.设置背景。
    2. 每个布局文件都加入上面那个布局文件,代码如下。
    <include
    android:id="@+id/action_bar"
    layout="@layout/common_view_actionbar_right_text" />
    
    1. 跳转页面时来通过putExtra设置相应的的标题即可

    2015-09-10

    设置EditText默认不弹出小键盘

    • Activity里配置下列代码

      getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);   
      

    • 配置文件中配置下列代码

      android:windowSoftInputMode="adjustUnspecified|stateHidden" 
      

    2015-09-15

    复制布局文件时,有自定义view,要注意改其包名。

    2015-09-16

    如何将Activity的数据传到Fragment(解决Activity传值到Viewpager的Fragment里面)

    1. 在Fragment里创建一个静态方法,用于创建Fragment,参数为Activity所要传的参数。
    2. 在上述方法中,fragment对象调用setArguments方法设置值。
    3. 在onCreate方法中 通过get方法获取该值。

      代码如下:

      private int schoolId;
      public static TeacherFragment newInstance(int schoolId) {
          Bundle args = new Bundle();
          args.putInt("schoolid", schoolId);
          TeacherFragment fragment = new TeacherFragment();
          fragment.setArguments(args);
          return fragment;
      }
      
       @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          Bundle args = getArguments();
          schoolId = args.getInt("schoolid");
      }
      

    2015-09-17

    一般修改完信息之后,需要回调设置数据(在onActivityResult中设置显示)

    2015-09-23 13:14:20

    时间戳

    • 时间戳转date
    long = 1442985320;
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Long time = new Long(long);
    Date date = new Date(time);
    tvMybirth.setText(sdf.format(date));
    //合起来写
    String date = sdf.format(new Date(long));
    
    • date转时间戳
    String strDate = dpBirth.getYear() + "-" + (dpBirth.getMonth() + 1) + "-" + dpBirth.getDayOfMonth() + "";
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            Date date = null;
            try {
                date = sdf.parse(strDate);
    
            } catch (ParseException e) {
                e.printStackTrace();
            }
    
            //获取时间戳
            birthday = date.getTime();
    
    • 年月日转时间戳

         public static long getTimestampByDate(int year, int month, int day) {
          SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
          String strDate = year + "-" + month + "-" + day;
          Date date = null;
          try {
              date = sdf.parse(strDate);
          } catch (ParseException e) {
              e.printStackTrace();
          }
          return date.getTime();
      }
      

    实际开发:

    • 服务器下发一串String的日期 例如 20151106 ,要显示成2015年11月06日

    思路:将String转成Date,再用date转成其他

    1. 将String转Date

      Date date = new SimpleDateFormate("yyyyMMdd").parse("20151106");  
      
    2. 再用Date转成自己想要的格式

      String msg = new SimpleDateFormate("yyyy年MM月dd日").format(date.getTime());
      

    2015-09-23 13:14:20

    DatePicker 初始化日期

    dp.init(2015,09,11,null);
    

    2015-09-25 10:47:40

    TextView显示字数限制必须小于服务端的字数限制

    2015-09-30 17:57:46

    获取屏幕分辨率的宽高

    int height = getResources().getDisplayMetrics().heightPixels;
    int width = getResources().getDisplayMetrics().widthPixels;
    

    2015-10-01 09:01:47

    震动和声音

    震动:

    Vibrator vib = (Vibrator) context.getSystemService(Service.VIBRATOR_SERVICE);
    vib.vibrate(500);
    

    声音:

    Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
       MediaPlayer player = new MediaPlayer();
       player.setDataSource(context, alert);
       final AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
       if (audioManager.getStreamVolume(AudioManager.STREAM_NOTIFICATION) != 0) {
           player.setAudioStreamType(AudioManager.STREAM_NOTIFICATION);
           player.setLooping(false);
           player.prepare();
           player.start();
       }
    

    2015-10-02 15:37:41

    版本更新实际开发

    版本更新

    2015-10-03 10:33:48

    setEnable、setClickable的区别

    setEnable 可以实现取按钮不能点击
    setClickable 由于setOnClickListener会改变其属性,所以设置无效。不建议使用。

    2015-10-13 10:22:08

    Application的理解

    Application 用于保存整个应用程序的全局变量。可以初始化一些配置。例如网络配置、工具配置等。
    
    BNJ中的用处:
    初始化用户的信息、机构的信息、网络配置 以及创建Global
    

    Application参考一

    Application参考二

    2015/11/5 16:49:38

    请求不同类别的同一数据,数据下拉加载后,必须要将请求页置1

    BNJ项目中复现步骤:
    我的机构->切换机构A(数据超过10条)->下拉刷新->切换机构B(数据只有5条)->报数据为空的错误。
    
    原因:机构B只有5条数据,而你请求了第二页的数据。
    
    解决办法:切换页面时,请求页置1
    

    2015/11/16 23:03:01

    二维码扫描功能开发

    下载库

    compile 'com.journeyapps:zxing-android-embedded:3.0.3@aar'
    compile 'com.google.zxing:core:3.2.0'
    

    github地址

    zxing-android-embedded

    1. 创建一个Activity继承CaptureActivity(示例ScanActivity)。
    2. MainFest注册该Activity

      <activity
      android:name=".find.ScanActivity"  
      android:screenOrientation="fullSensor"  //控制显示竖屏还是横屏,默认取决手机放置方式
      android:stateNotNeeded="true"  
      android:theme="@style/zxing_CaptureTheme"  
      android:windowSoftInputMode="stateAlwaysHidden"></activity>  
      
    3. 确定点击跳转的Button所处的页面是Activity还是Fragment

      • Activity

        IntentIntegrator integrator = new IntentIntegrator(this);
        
      • Fragment

        IntentIntegrator integrator = IntentIntegrator.forFragment(CurrentFragment.this);
        IntentIntegrator integrator = IntentIntegrator.forSupportFragment(CurrentFragment.this)
    4. 配置参数并且跳转Activity

      integrator.setCaptureActivity(ScanActivity.class);//不调用此方法,无法改变扫描为竖屏,设置创建的Activity
      integrator.setDesiredBarcodeFormats(IntentIntegrator.ONE_D_CODE_TYPES);  设置识别码的类型(见最下方)
      integrator.setOrientationLocked(false);//设置扫描框是否跟随手机放置而变化 false 为横竖屏,true竖屏
      integrator.setCameraId(0);  // Use a specific camera of the device  
      integrator.setPrompt("what the fuck"); //设置扫描识别码时,显示的文字提示。
      integrator.setBeepEnabled(false);  //设置无声音
      integrator.setBarcodeImageEnabled(true); //讲扫描的识别码传入到intent中
      integrator.initiateScan();  //启动跳转
      
    1. 重写onActivityResult方法
        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
        IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);//获取识别内容
        if (result != null) {
            if (result.getContents() == null) {
                //扫描取消的处理
            } else {
                //对扫描结果的处理
                Functions.toast(getActivity(), "扫描结果:" + result.getContents());
            }
        } else {
            Log.d("MainActivity", "Weird");
            // This is important, otherwise the result will not be passed to the fragment
            super.onActivityResult(requestCode,resultCode,data);
        }
    }
    
    
    
    
    
    -  识别码类型
    
        * ONE_D_CODE_TYPES  条形码
        * QR_CODE_TYPES 二维码
        * ALL_CODE_TYPES 扫描各种码
        * PRODUCT_CODE_TYPES 产品码
    

    ####图一

    ####图二

    getParentFragment()不是获取当前Fragment,获取当前Fragment直接用 Fragment.this

    例子:

    btn_test_one.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
          IntentIntegrator integrator = IntentIntegrator.forSupportFragment(MineFragment.this);
         }
        });
    

    2015/11/25 22:39:31

    EditText 只读内容滚动

    setKeyListener(null);
    

    2015/12/2 11:10:21

    底部tags check效果设置

    选中的设置 checked、selected属性
    默认的 不用设置属性,一定要放到最后面!

    <item android:state_selected="true" android:drawable="@drawable/teach_kq_selected_large" />
    <item android:state_checked="true" android:drawable="@drawable/teach_kq_selected_large" />
    <item android:drawable="@drawable/teach_kq_button_disable_bg_shape" />
    

    还需要设置默认第一个tag为红色。
    在Activity中通过setSelected()方法设置为红色。
    在点击事件里,设置其他button为灰色
    代码如下:

    @Override
    public void onClick(View v) {
    
        if(index == 0){
            btn1.setSelected(true);
            btn2.setSelected(false);
                .
                .
            btn10.setSelected(false);
        }
    }  
    

    2015/12/2 9:30:29

    Checkbox实际开发

    • ListView里面有Checkbox,item点击事件会失效

    • 解决办法 —— Checkbox加入下面属性

      android:clickable="false"
      android:focusable="false"
         android:focusableInTouchMode="false"
      

    1. 准备两张图,分别是选中和未选中的图。
    2. 通过上述两张图制作一个selector。(看上面)
    3. 创建一个HashSet 集合checkSet,用于保存已选中的item。

      private HashSet<CouponInfo> checkedSet = new HashSet<>();//记录选中的图片信息
      
    4. 在AdapterItem点击事件里通过判断该集合checkSet是否含有某个info来设置选中/取消选中。

      if (checkedSet.contains(info)) {
          checkedSet.remove(info);
          holder.cbCoupon.setChecked(false);
          Functions.toast(CouponActivity.this,"取消选择"+i);
      } else {
          checkedSet.add(info);
          holder.cbCoupon.setChecked(true);
          Functions.toast(CouponActivity.this,"选中"+i);
      }
      
    5. 处理Adapter里的Checkbox,将checkSet集合里的item设置为true,用于初始化一开始的数据

      if (checkedSet.contains(info)) {
          holder.cbCoupon.setChecked(true);
      } else {
          holder.cbCoupon.setChecked(false);
      }
      

    2015/12/2 15:25:27

    去除字符串最后一个字符

    str.substring(0,str.length()-1));    
    

    2015/12/3 17:10:53

    Gson实体不能有重复的字段出现

    • 示例

      父类有status,子类又声明了status
      

    2015/12/8 9:35:56

    多次请求导致后面请求无效的bug

    为请求设定请求flag,请求后修改flag,请求成功后修改flag
    
    • 示例 - 修改密码

      if (REQ_FLAG ==  CommonString.REQ_STATUS_YES) {
      reqModifyPSW = ApiBizProtocol.onUpdatePassword(ModifyPSWActivity.this, oldPSW, newPSW_confirm, ModifyPSWActivity.this);
      REQ_FLAG =  CommonString.REQ_STATUS_NO;//请求后修改flag
      }
      
    @Override
    public void onGeneralSuccess(String result, long flag) {
    REQ_FLAG =  CommonString.REQ_STATUS_YES; //请求成功后修改flag
    }
    

    2015/12/8 11:24:29

    写完点击事件还不能点击的bug

    • 原因

      View没被初始化
      

    2015/12/18 9:21:45

    进入页面处理完后回调的方法

    • 重新请求(大量数据)

      * 适用于大量数据变化
      * ListView有时间顺序(例如个人经历、成果分享)
      
    • onActivityResult(个别数据)

      回调删除某一项,
      
    Contents
    1. 1. 2015-09-14
      1. 1.1. 如何解决多个按钮同时点击的bug
      2. 1.2. 将程序设置成无标题栏,自己定义Actionbar
    2. 2. 2015-09-10
      1. 2.1. 设置EditText默认不弹出小键盘
    3. 3. 2015-09-15
      1. 3.1. 复制布局文件时,有自定义view,要注意改其包名。
    4. 4. 2015-09-16
      1. 4.1. 如何将Activity的数据传到Fragment(解决Activity传值到Viewpager的Fragment里面)
    5. 5. 2015-09-17
      1. 5.0.1. 一般修改完信息之后,需要回调设置数据(在onActivityResult中设置显示)
  • 6. 2015-09-23 13:14:20
    1. 6.0.1. 时间戳
  • 7. 2015-09-23 13:14:20
    1. 7.0.1. DatePicker 初始化日期
  • 8. 2015-09-25 10:47:40
    1. 8.0.1. TextView显示字数限制必须小于服务端的字数限制
  • 9. 2015-09-30 17:57:46
    1. 9.0.1. 获取屏幕分辨率的宽高
  • 10. 2015-10-01 09:01:47
    1. 10.0.1. 震动和声音
  • 11. 2015-10-02 15:37:41
    1. 11.0.1. 版本更新实际开发
  • 12. 2015-10-03 10:33:48
    1. 12.0.1. setEnable、setClickable的区别
  • 13. 2015-10-13 10:22:08
    1. 13.0.1. Application的理解
  • 14. 2015/11/5 16:49:38
    1. 14.0.1. 请求不同类别的同一数据,数据下拉加载后,必须要将请求页置1
  • 15. 2015/11/16 23:03:01
    1. 15.0.1. 二维码扫描功能开发
  • 15.1. getParentFragment()不是获取当前Fragment,获取当前Fragment直接用 Fragment.this
  • 16. 2015/11/25 22:39:31
    1. 16.1. EditText 只读内容滚动
  • 17. 2015/12/2 11:10:21
    1. 17.1. 底部tags check效果设置
  • 18. 2015/12/2 9:30:29
    1. 18.1. Checkbox实际开发
  • 19. 2015/12/2 15:25:27
    1. 19.1. 去除字符串最后一个字符
  • 20. 2015/12/3 17:10:53
    1. 20.1. Gson实体不能有重复的字段出现
  • 21. 2015/12/8 9:35:56
    1. 21.1. 多次请求导致后面请求无效的bug
  • 22. 2015/12/8 11:24:29
    1. 22.1. 写完点击事件还不能点击的bug
  • 23. 2015/12/18 9:21:45
    1. 23.1. 进入页面处理完后回调的方法