标签归档: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功能:
统计tab功能:
还有就是,本应用就不再开源了,目前源码放在本人自己架设的 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(); } });
好用的安卓手机看源码app
android开发 SQLite的使用
xiaofanghuiluAndroidBzw一些设计细节规划
底部三个tab,使用 fragment实现.
一个用来查询的 tab,一个用来显示所有回路和编码的tab,一个设置的tab.
查询的tab
下面是数字按钮,上面是显示框,类似计算器的布局.当按够5位数(两位回路,三位编码),自动查询服务器,显示编码信息.
如果服务器没有编码信息,在编码号旁边显示添加按钮,如果有编码信息,显示修改按钮.
所有回路编码的列表tab
类似”联系人”的布局,顶部一行是”添加编码”,下面是列表,长按任何一条显示可以弹出菜单,点击修改,进入修改界面.
列表tab和查询tab所进入的添加和修改编码的界面是同样的 activity,通过intent.
设置
略…
登录
用户名密码的方式,微信等的登录似乎有些不适合,未来会加入权限.