标签归档:android

Fragment hide时触发的回调方法

我们可以先 add 然后通过 hide和show来控制fragment的切换,也可以先 add然后attach和detach来控制 fragment的切换.

如果使用 hide 和 show,那么每次切换fragment的生命周期的一系列函数是不会执行的,比如 onCreateView之类的.而使用 attach 和 detach则会调用生命周期的函数。

不过其实如果使用 hide 和 show的话,也可以触发一个方法,就是 onHiddenChanged()方法:

    @Override
    public void onHiddenChanged(boolean hid) {
        if (hid) {
            Log.d("meFragment", "隐藏显示");
        } else {
            Log.d("meFragment","恢复显示");
        }
    }

安卓app-"三班两倒"项目规划

第一次启动设置姓名以及对应的上班日期时间.

主界面三个tab,一个"查看",一个"统计",一个"设置".

设置tab功能:

  • 添加删除管理"标签",比如"加班","请假"之类的.
  • 修改姓名和日期
  • 查看tab功能:

  • 显示轮班界面,点击或者长按弹出菜单,可以添加标签,比如添加"加班"标签.
  • 界面滑动,上面日期也会变化,点击上面日期,显示一个datepicker,可以选择日期,确定之后,显示设置的日期的轮班列表.
  • 统计tab功能:

  • 显示设定时间范围的各个标签的数量,默认为当月1日到当天的.比如5月1日到5月31日标记为"加班"标签的数量.(有个问题其实还要考虑半加班班),其实半个加班可以在设置中添加一个标签.这样就不要另外的功能实现了.
  • 目前开发进度,如图,昨天晚上弄的:

    还有就是,本应用就不再开源了,目前源码放在本人自己架设的 git服务器上面,这应用将会放在应用市场上,不知道有没有什么限制.之前的那个消防回路的app是练手用的,这个将是我的处女作.

    xiaofanghuiluAndroidBzw界面展示

    图中编码数据用来测试,没有任何实际意义.
    适配机型:目前除了电脑闹上的模拟器,只在我的红米4的手机上跑过。

    查询编码:


    icon图标:


    不存在的编码,显示添加此编码按钮:


    用户登录


    编码列表:


    编码详细信息:


    修改编码:


    查询不同类型和不同状态的传感器:

    存在的问题:
    安全性: 明文传输的token,实际上并没有什么卵用,我想不出一种一次性token的方案,让请求参数不可更改倒是可以实现,但是没办法让一个api请求一次之后就失效.后来想上https,正好阿里云提供免费的域名ssl证书,但是想想还是太麻烦,每个子域名都得配置.并且这个应用还只是一个练手的东西.之后用到微信登录 oauth之类的,之后应该能够参考一下.

    代码还是有点乱:看了<设计模式>,似乎帮助并不是太大,还是经历的项目少,我也主要是没有时间细读.

    应该加入的功能
    软件升级:启动自己检查新版本然后下载更新,这个容易实现.
    记录功能:显示最近查询 添加和修改的记录.
    实现权限:很难,我没有做过这个.而且要改动的代码可能很多.看过wordpress的权限实现方式.

    给 SweetAlertDialog 设置监听器

    SweetAlertDialog这个库很好用,是关于对话框的第三方库。

    package com.baozhuwanglei.android.xiaofanghuiluandroidbzw.xiaofanghuiluandroidbzw.common;
    
    import android.app.Activity;
    import android.app.Dialog;
    import android.content.Context;
    import android.content.Intent;
    import android.content.res.Resources;
    import android.support.v4.content.ContextCompat;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import com.baozhuwanglei.android.xiaofanghuiluandroidbzw.xiaofanghuiluandroidbzw.R;
    import com.baozhuwanglei.android.xiaofanghuiluandroidbzw.xiaofanghuiluandroidbzw.api.Api;
    import com.baozhuwanglei.android.xiaofanghuiluandroidbzw.xiaofanghuiluandroidbzw.service.DownloadService;
    
    import cn.pedant.SweetAlert.SweetAlertDialog;
    
    /**
     * Created by baozhuwanglei on 17-4-13.
     */
    public class DialogManager {
        private static DialogManager instance;
        private SweetAlertDialog loadDialog;
    
        private DialogManager() {}
    
        public static DialogManager getInstance() {
            if (instance == null) {
                instance = new DialogManager();
            }
            return instance;
        }
    
        /**
         * @param context 上下文
         * @param title   标题
         *                

    * 加载中 */ public void loadDialog(Context context, String title) { loadDialog = new SweetAlertDialog(context, SweetAlertDialog.PROGRESS_TYPE); loadDialog.getProgressHelper().setBarColor(ContextCompat.getColor(context, R.color.colorPrimaryDark)); loadDialog.setTitleText(title); loadDialog.setCancelable(false); loadDialog.show(); } public void loadDialogDismiss() { if (loadDialog.isShowing()) { loadDialog.dismiss(); } } /** * 显示消息 * @param context 上下文 * @param title 标题 * @param content 内容 * @param type 类型 */ public void showMsgDialog(Context context, String title, String content, int type) { SweetAlertDialog msgDialog = new SweetAlertDialog(context, type); msgDialog.setTitleText(title); msgDialog.setContentText(content); msgDialog.show(); } /** * 重载 加入监听器 */ public void showMsgDialog(Context context, String title, String content, int type, SweetAlertDialog.OnSweetClickListener listener) { SweetAlertDialog msgDialog = new SweetAlertDialog(context, type); msgDialog.setTitleText(title); msgDialog.setContentText(content); msgDialog.setConfirmText("确定"); msgDialog.show(); msgDialog.setConfirmClickListener(listener); } /** * 网络超时 */ public void errorDialog(Context context) { SweetAlertDialog msgDialog = new SweetAlertDialog(context, SweetAlertDialog.ERROR_TYPE); msgDialog.setTitleText("提示"); msgDialog.getProgressHelper().setBarColor(R.color.colorPrimary); msgDialog.setContentText("网络超时,请重试"); msgDialog.setConfirmText("确定"); msgDialog.show(); msgDialog.setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() { @Override public void onClick(SweetAlertDialog sweetAlertDialog) { sweetAlertDialog.dismiss(); } }); } /** * 警告 * confirm */ public void showWarmDialog(Context context, String title, String content, String confirmText, SweetAlertDialog.OnSweetClickListener listener) { SweetAlertDialog dialog = new SweetAlertDialog(context, SweetAlertDialog.WARNING_TYPE); dialog.setTitleText(title); dialog.setContentText(content); dialog.setConfirmText(confirmText); dialog.setCancelText("取消"); dialog.setCancelClickListener(new SweetAlertDialog.OnSweetClickListener() { @Override public void onClick(SweetAlertDialog sweetAlertDialog) { sweetAlertDialog.dismiss(); } }); dialog.setConfirmClickListener(listener); dialog.show(); } /** * 版本更新 dialog */ public void showUpdateDialog(final Context context, final Activity activity, String titleString, String contentString) { final Dialog dialog = new Dialog(context, R.style.dialog); dialog.setCancelable(false); dialog.setContentView(R.layout.update_app_dialog); TextView mTitleTv = (TextView) dialog.findViewById(R.id.c_title_tv); TextView contentTv = (TextView) dialog.findViewById(R.id.update_content_tv); Button mNegativeButton = (Button) dialog.findViewById(R.id.negative_btn); Button mPositiveButton = (Button) dialog.findViewById(R.id.positive_btn); mTitleTv.setText(titleString); contentTv.setText(contentString); mNegativeButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); mPositiveButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(activity, DownloadService.class); intent.putExtra("downUrl", Api.VERSION_UPDATE); activity.startService(intent); dialog.dismiss(); Toast.makeText(context, "后台加载中...", Toast.LENGTH_SHORT).show(); } }); dialog.show(); } }

    这个类封装了 SweetAlertDialog,这个类不是我写的,但是我加入了一个重载方法,这样就可以让showMsgDialog方法能够去设置监听器了。实现监听器类很简单:

    new SweetAlertDialog.OnSweetClickListener() {
                @Override
                public void onClick(SweetAlertDialog sweetAlertDialog) {
                    sweetAlertDialog.dismiss();
                }
            });