公司有需求要做一个时间排版,原型例如以下

由于要用的gridView,曾经就是它的排版非常多,最看是想用一个checkbox搞定。

后来证实功能可以达到。可是排版是乱的。还是老老实实多写点吧(直接上代码)

技术不好什么地方不正确求指正

首先是主页:

  1. public class MyActivity extends Activity {
  2. /**
  3. * Called when the activity is first created.
  4. */
  5. private HashSet<Integer> shou = new HashSet<Integer>();
  6. private int[] Mark = {1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0};
  7. @Override
  8. public void onCreate(Bundle savedInstanceState) {
  9. super.onCreate(savedInstanceState);
  10. setContentView(R.layout.main);
  11. Button button = (Button) findViewById(R.id.button);
  12. final WrapGridView wrapGridView = (WrapGridView) findViewById(R.id.gridview);
  13. final DayTimeAdapter dayTimeAdapter = new DayTimeAdapter(this, Mark);
  14. wrapGridView.setAdapter(dayTimeAdapter);
  15.  
  16. button.setOnClickListener(new View.OnClickListener() {
  17. @Override
  18. public void onClick(View view) {
  19. Toast.makeText(MyActivity.this, "fdsgs", Toast.LENGTH_SHORT).show();
  20. shou = dayTimeAdapter.remark();
  21. Iterator<Integer> iterator = shou.iterator();
  22. while (iterator.hasNext()) {
  23. Log.i("mark", iterator.next() + "");
  24. }
  25. }
  26. });
  27. }
  28. }

主要是 用来传入表示数组  和接受返回选中标识的

自己定义gridView:

  1. public class WrapGridView extends GridView{
  2. public WrapGridView(Context context) {
  3. super(context);
  4. }
  5.  
  6. public WrapGridView(Context context, AttributeSet attrs) {
  7. super(context, attrs);
  8. }
  9.  
  10. public WrapGridView(Context context, AttributeSet attrs, int defStyle) {
  11. super(context, attrs, defStyle);
  12. }
  13.  
  14. @Override
  15. protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  16. int expandSpec=MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2,MeasureSpec.AT_MOST);
  17. super.onMeasure(widthMeasureSpec, expandSpec);
  18. }
  19.  
  20. @Override
  21. public boolean dispatchTouchEvent(MotionEvent ev) {
  22. if (ev.getAction()==MotionEvent.ACTION_MOVE){
  23. return true;//禁止滑动
  24. }
  25. return super.dispatchTouchEvent(ev);
  26. }
  27. }

这里是来来禁止滑动    只是onMeasure方法 只是你后面要在代码里自己设置高宽的时候须要

最后是适配器:

  1. public class DayTimeAdapter extends BaseAdapter{
  2. private ArrayList<Integer> Mark = new ArrayList<Integer>();
  3. private String[] Time = {"8:00", "8:30", "9:00", "9:30", "10:00", "10:30", "11:00", "11:30", "12:00", "12:30", "13:00", "13:30", "14:00", "14:30",
  4. "15:00", "15:30", "16:00", "16:30", "17:00", "17:30", "18:00", "18:30", "19:00", "19:30", "20:00"};
  5. private LayoutInflater mInflater;
  6. private HashSet<Integer> returnMark = new HashSet<Integer>();
  7.  
  8. public DayTimeAdapter(Context context, int[] m) {
  9. mInflater = LayoutInflater.from(context);
  10. for (int i = 0; i < m.length; i++) {
  11. Mark.add(m[i]);
  12. }
  13. }
  14.  
  15. @Override
  16. public int getCount() {
  17. return Mark.size();
  18. }
  19.  
  20. @Override
  21. public Object getItem(int i) {
  22. return Mark.get(i);
  23. }
  24.  
  25. @Override
  26. public long getItemId(int i) {
  27. return i;
  28. }
  29.  
  30. @Override
  31. public View getView(final int i, View view, ViewGroup viewGroup) {
  32. DayTimeHolder dayTimeHolder=null;
  33. if (view == null||view.getTag()==null) {
  34. view = mInflater.inflate(R.layout.item_time, null);
  35. dayTimeHolder=new DayTimeHolder();
  36. dayTimeHolder.checkBox = (CheckBox) view.findViewById(R.id.checkBox);
  37. dayTimeHolder.timeName= (TextView) view.findViewById(R.id.textView);
  38. view.setTag(dayTimeHolder);
  39. }else {
  40. dayTimeHolder = (DayTimeHolder) view.getTag();
  41. }
  42. dayTimeHolder.timeName.setText(Time[i]);
  43. int a = Mark.get(i);
  44. if (a == 0) {
  45. view.setBackgroundColor(Color.parseColor("#04385A"));
  46. dayTimeHolder.checkBox.setVisibility(View.INVISIBLE);
  47. dayTimeHolder.checkBox.setClickable(false);
  48. }
  49. final View finalView = view;
  50. final Handler handler = new Handler() {
  51. public void handleMessage(Message msg) {
  52. if (msg.what == 1) {
  53. finalView.setBackgroundColor(Color.parseColor("#F0AB4E"));
  54. // Log.i("mark","shoushoushou");
  55. } else {
  56. finalView.setBackgroundColor(Color.parseColor("#000000"));
  57. }
  58. }
  59. };
  60. dayTimeHolder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
  61. @Override
  62. public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
  63. Message msg = new Message();
  64. if (b) {
  65. msg.what = 1;
  66. Log.i("mark", "111111111111");
  67. returnMark.add(i);
  68. } else {
  69. msg.what = 2;
  70. Log.i("mark", "22222222222222");
  71. returnMark.remove(i);
  72. }
  73. handler.sendMessage(msg);
  74. }
  75. });
  76.  
  77. return view;
  78. }
  79.  
  80. public HashSet remark() {
  81. return returnMark;
  82. }
  83. }
  84. class DayTimeHolder{
  85. public CheckBox checkBox;//多选button
  86. public TextView timeName;//时间名称
  87. }

这里就是 直接初始化gridview结构。

里面用到的handler和message是动态更新选中状态的须要啦。

好久没写过这些了,我们这行除了技术就是经验了积累。

唉。怎么越学感觉自己越懒。。

gridView自己定义做时间排版的更多相关文章

  1. JS对象 Date 日期对象 日期对象可以储存任意一个日期,并且可以精确到毫秒数(1/1000 秒)。 定义一个时间对象 : var Udate=new Date();Date()的首字母须大写

    Date 日期对象 日期对象可以储存任意一个日期,并且可以精确到毫秒数(1/1000 秒). 定义一个时间对象 : var Udate=new Date(); 注意:使用关键字new,Date()的首 ...

  2. 用R做时间序列分析之ARIMA模型预测

    昨天刚刚把导入数据弄好,今天迫不及待试试怎么做预测,网上找的帖子跟着弄的. 第一步.对原始数据进行分析 一.ARIMA预测时间序列 指数平滑法对于预测来说是非常有帮助的,而且它对时间序列上面连续的值之 ...

  3. iOS-自定义起始时间选择器视图

    概述 自定义起始时间选择器视图, 调起时间选择器, 传值(起始时间/截止时间), 两者时间均要合理, 不能超过未来时间, 并且起始时间不能大于截止时间. 点击取消或空白处收起时间选择器. 详细 代码下 ...

  4. PHP使用DateTime类做时间日期到字符串转换

    PHP关于时间日期的处理不是很规范,简单就简单了,就是不知道输入的字符串是否能够正确转化为需要的DateTime类型. 面向对象的PHP应该使用DateTime类来做string和dateTime的转 ...

  5. windows做时间服务器,linux和windows时间同步

    找了很多的资料,都没有windows做时间服务,linux同步windows的时间的,最后自己找了一些软件,终于搞定了,写出来给大家共享,以免大家多走弯路 首先在http://www.meinberg ...

  6. 如何使用Omnifocus做时间管理 4 多项目管理

    这一篇和大家分享作为一个管理者,可能遇到的时间管理挑战和如何用omnifocus应对这些挑战. 张经理在一家IT公司上班,从程序员开始打拼了5年,凭借权威的技术能力当上了项目经理,同时管理三个项目,苦 ...

  7. 第二章 Vue快速入门-- 25 过滤器-定义格式化时间的全局过滤器

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  8. GridView利用PagerTemplate做分页显示设置上一页下一页转到下拉转页

    效果如图: 代码如下: aspx页: <asp:GridView ID="GridViewMain" runat="server" OnPageIndex ...

  9. Android全局异常处理 实现自己定义做强制退出和carsh日志抓取

    在做android项目开发时,大家都知道都会遇到程序报错或者Anr异常,会弹出来一个强制退出的弹出框,对于开发人员是好事,但是对于用户体验和 UI实在毫无违和感,别说用户接受不了,就连我们自己本身可能 ...

随机推荐

  1. redis(二)redis+TCMALLOC高性能的缓存服务器的安装配置

    安装  1准备编译环境    yum -y install gcc gcc+ gcc-c++ openssl openssl-devel pcre pcre-devel  2 下载源码包(由于goog ...

  2. Json也可以这么使

    public string GetJSON() { //Json数据 string json112 = "{\"control_info\":{\"imei\& ...

  3. Codeforces Round #260 (Div. 2)C. Boredom(dp)

    C. Boredom time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  4. DHTML【11】--DOM

    大家好,从今天开始,我们将进入DOM的学习. DOM?DOM是何东东呢?大家还记得我在前面提过的DOM树吗?就是我在前面讲HTML的时候画的那个图,那个其实就是一个简单的DOM树,浏览器在解析HTML ...

  5. Android学习笔记之View(一):LayoutInflater

    使用LayoutInflater加载布局的两种方式: 第一种: LayoutInflater inflater=LayoutInflater.from(context); inflater.infla ...

  6. 使用ant的war任务打包j2ee web项目

    <?xml version="1.0" encoding="UTF-8"?> <project name="antwebprojec ...

  7. CentOS6.5+php5.3听云安装过程

    听云安装过程请参考听云安装指导页面:http://doc.tingyun.com/help/html/doc/server_novice.html 根据自己的服务器系统和语言包下载对应的 安装包 安装 ...

  8. Python常用模块中常用内置函数的具体介绍

    Python作为计算机语言中常用的语言,它具有十分强大的功能,但是你知道Python常用模块I的内置模块中常用内置函数都包括哪些具体的函数吗?以下的文章就是对Python常用模块I的内置模块的常用内置 ...

  9. 在mac os 中安装 autoconf and automake

    转载地址:http://www.mattvsworld.com/blog/2010/02/install-the-latest-autoconf-and-automake-on-mac-os-10-6 ...

  10. DNS与网站优化

    点就出现了这样的问题,导致了几小时的访问失败,所以选择优秀的DNS服务器势必关系网站发展的生死存亡.本文做以下分析.     选择良好的DNS服务器要从选择域名注册商说起,在注册域名时多数人看中的仅仅 ...