2018.08.06[android日心得]

日工作总结

  • 1.根据接口获取数据是否为空,对获取集合元素是否为空进行判断
    代码如下


    private void getIndex() {
    String ua = PermissionUtil.getInstance().getImei(activity);
    String version = activity.getResources().getString(R.string.version_name);
    action.getIndex(activity, ua, version, new ActionCallbackListener() {
    @Override
    public void onSuccess(IndexBean data) {

    //注释:data.getArticles().size()是对接口获取的数组数据进行判断.size()是否为空,为空的话setText("XX"),否则获取接口获取的数据.
            if (data.getArticles().size()==0){
                tv_announce.setText("无数据");
            }else {               tv_announce.setText(data.getArticles().get(0).getTitle());
            }
    //注释:获取Bean中数据进行数据展示
            List<OptimizationProductsBean> list = new ArrayList<>();
    
            for (int i = 0; i < data.getOptimizationProducts().size(); i++) {
    
                data.getOptimizationProducts().get(i).getImageUrl();
    
                list.add(data.getOptimizationProducts().get(i));
            }
    
            FavorAdapter adapter = new FavorAdapter(activity, list);
            lv_favor.setAdapter(adapter);
            //注释:根据listview的item个数,动态设置listview的高度
            setListViewHeightBasedOnChildren(lv_favor);
        @Override
        public void onFailure(int errorCode, String message) {
            RequestBackCodeUtil.getInstance().handle(activity, errorCode, message);
        }
    });
    
  • 2.根据item数动态设定ListView的高度

  • //注释:此方法在setAdapter之后调用,子ListView的每个Item必须是LinearLayout,不能是其他的,因为其他的Layout(如RelativeLayout)没有重写onMeasure(),所以会在onMeasure()时抛出异常。

    public static void setListViewHeightBasedOnChildren(ListView listView) {
        ListAdapter listAdapter = listView.getAdapter();
        if (listAdapter == null) {
         return;
        }
        int totalHeight = 0;
        for (int i = 0; i < listAdapter.getCount(); i++) {
         View listItem = listAdapter.getView(i, null, listView);
         listItem.measure(0, 0);
         totalHeight += listItem.getMeasuredHeight();
        }
    
        ViewGroup.LayoutParams params = listView.getLayoutParams();
    
        params.height = totalHeight
          + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
        listView.setLayoutParams(params);
     }
    
  • 3.activity向Fragment传值


    //注释:在activity中创建方法,便于在Fragment中取值
    public AppAction getAppAction(){
    return appAction;
    }
    public MyApplication application(){
    return application;
    }
    //注释:在Fragment中onAttach()方法中获取activity传来的值
    @Override
    public void onAttach(Activity activity) {
    super.onAttach(activity);
    aAction = ((PosterActivity) activity).getAppAction();
    mApplication = ((PosterActivity) activity).getApplication();
    }

  • 4.activity向Fragment传值


    获取SharedPreferences的两种方式:
    1 调用Context对象的getSharedPreferences()方法
    2 调用Activity对象的getPreferences()方法
    两种方式的区别:
    调用Context对象的getSharedPreferences()方法获得的SharedPreferences对象可以被同一应用程序下的其他组件共享.
    调用Activity对象的getPreferences()方法获得的SharedPreferences对象只能在该Activity中使用.
    
    SharedPreferences的四种操作模式:
    Context.MODE_PRIVATE
    Context.MODE_APPEND
    Context.MODE_WORLD_READABLE
    Context.MODE_WORLD_WRITEABLE
    
    Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容
    Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件.
    Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件.
    MODE_WORLD_READABLE:表示当前文件可以被其他应用读取.
    MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入.
    将数据保存至SharedPreferences:
    SharedPreferences preferences=getSharedPreferences("user",Context.MODE_PRIVATE);
    Editor editor=preferences.edit();
    String name="xixi";
    String age="22";
    editor.putString("name", name);
    editor.putString("age", age);
    editor.commit();
    
    从SharedPreferences获取数据:
    SharedPreferences preferences=getSharedPreferences("user", Context.MODE_PRIVATE);
    String name=preferences.getString("name", "defaultname");
    String age=preferences.getString("age", "0");
    
  • 5.android中自定义弹出框样式


    private void showDialog() {
            final Dialog dialog = new Dialog(AppointMentActivity.this, R.style.dialogTheme);
            //View dialogView = LayoutInflater.from(activity).inflate(R.layout.photo_select,null);
            View dialogView = LayoutInflater.from(AppointMentActivity.this).inflate(R.layout.dialog_yuyue,null);
            //获得dialog的window窗口
            Window window = dialog.getWindow();
            //设置dialog在屏幕底部
            window.setGravity(Gravity.CENTER);
            //设置dialog弹出时的动画效果,从屏幕底部向上弹出
            // window.setWindowAnimations(R.style.dialogStyle);
            window.getDecorView().setPadding(DensityUtil.dip2px(30), DensityUtil.dip2px(30), DensityUtil.dip2px(30), DensityUtil.dip2px(30));
            //获得window窗口的属性
            WindowManager.LayoutParams lp = window.getAttributes();
            //设置窗口宽度为充满全屏
            lp.width = DensityUtil.dip2px(300);
            //设置窗口高度为包裹内容
            // lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
            lp.height = DensityUtil.dip2px(300); // 设置 dialog 高度
            //将设置好的属性set回去
            window.setAttributes(lp);
            //将自定义布局加载到dialog上
            dialog.setContentView(dialogView);
            //dialog.setCanceledOnTouchOutside(false); // false 调用这个方法时,按对话框以外的地方不起作用。按返回键还起作用
            dialog.setCanceledOnTouchOutside(true);
    
            MyTextView tv_confirm = dialogView.findViewById(R.id.tv_confirm);
            tv_confirm.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    dialog.dismiss();
                }
            });
    
            dialog.show();
        }
    
  • 6.点击提交进行数据校验


    //注释:在调接口数据之前进行验证
     @Override
      public void onClick(View v) {
            switch (v.getId()){
                case R.id.rl_subscribe:
                    if(TextUtils.isEmpty(et_name.getText().toString())){
                        ToastUtil.show(AppointMentActivity.this,"请输入姓名");
                        return;
                    }
    //注释:先为匹配正则表达式
                    String nameFormula = "[\\u4e00-\\u9fa5a-zA-Z]{2,50}"; // 2-50字中英文姓名
                    if(!et_name.getText().toString().matches(nameFormula)){
                        ToastUtil.show(context,"请输入2-50中文或是英文");
                        return;
                    }
                    if(TextUtils.isEmpty(et_phone.getText().toString()) || et_phone.getText().toString().length() != 11){
                        ToastUtil.show(AppointMentActivity.this,"手机号格式错误,请重新输入");
                        return;
                    }
                    if(et_input.getText().toString().length() > 30){
                        ToastUtil.show(AppointMentActivity.this,"备注最多30个字");
                        return;
                    }
                    showDialog();
                    getAppointment();
                    break;
                case R.id.base_back:
                    break;
    
            }
            super.onClick(v);
        }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值