gridView自定义做时间排版

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

因为要用的gridView,以前就是它的排版很多,最看是想用一个checkbox搞定。后来证实功能能够达到,但是排版是乱的。还是老老实实多写点吧(直接上代码)

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

首先是主页:

public class MyActivity extends Activity {
    /**
     * Called when the activity is first created.
     */
    private HashSet<Integer> shou = new HashSet<Integer>();
    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};
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button button = (Button) findViewById(R.id.button);
        final WrapGridView wrapGridView = (WrapGridView) findViewById(R.id.gridview);
        final DayTimeAdapter dayTimeAdapter = new DayTimeAdapter(this, Mark);
        wrapGridView.setAdapter(dayTimeAdapter);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MyActivity.this, "fdsgs", Toast.LENGTH_SHORT).show();
                shou = dayTimeAdapter.remark();
                Iterator<Integer> iterator = shou.iterator();
                while (iterator.hasNext()) {
                    Log.i("mark", iterator.next() + "");
                }
            }
        });
    }
}

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

自定义gridView:

public class WrapGridView extends GridView{
    public WrapGridView(Context context) {
        super(context);
    }

    public WrapGridView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public WrapGridView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int expandSpec=MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2,MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        if (ev.getAction()==MotionEvent.ACTION_MOVE){
            return true;//禁止滑动
        }
        return super.dispatchTouchEvent(ev);
    }
}

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

最后是适配器:

public class DayTimeAdapter extends BaseAdapter{
    private ArrayList<Integer> Mark = new ArrayList<Integer>();
    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",
            "15:00", "15:30", "16:00", "16:30", "17:00", "17:30", "18:00", "18:30", "19:00", "19:30", "20:00"};
    private LayoutInflater mInflater;
    private HashSet<Integer> returnMark = new HashSet<Integer>();

    public DayTimeAdapter(Context context, int[] m) {
        mInflater = LayoutInflater.from(context);
        for (int i = 0; i < m.length; i++) {
            Mark.add(m[i]);
        }
    }

    @Override
    public int getCount() {
        return Mark.size();
    }

    @Override
    public Object getItem(int i) {
        return Mark.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(final int i, View view, ViewGroup viewGroup) {
        DayTimeHolder dayTimeHolder=null;
        if (view == null||view.getTag()==null) {
            view = mInflater.inflate(R.layout.item_time, null);
            dayTimeHolder=new DayTimeHolder();
            dayTimeHolder.checkBox = (CheckBox) view.findViewById(R.id.checkBox);
            dayTimeHolder.timeName= (TextView) view.findViewById(R.id.textView);
            view.setTag(dayTimeHolder);
        }else {
            dayTimeHolder = (DayTimeHolder) view.getTag();
        }
        dayTimeHolder.timeName.setText(Time[i]);
        int a = Mark.get(i);
        if (a == 0) {
            view.setBackgroundColor(Color.parseColor("#04385A"));
            dayTimeHolder.checkBox.setVisibility(View.INVISIBLE);
            dayTimeHolder.checkBox.setClickable(false);
        }
        final View finalView = view;
        final Handler handler = new Handler() {
            public void handleMessage(Message msg) {
                if (msg.what == 1) {
                    finalView.setBackgroundColor(Color.parseColor("#F0AB4E"));
//                    Log.i("mark","shoushoushou");
                } else {
                    finalView.setBackgroundColor(Color.parseColor("#000000"));
                }
            }
        };
        dayTimeHolder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                Message msg = new Message();
                if (b) {
                    msg.what = 1;
                    Log.i("mark", "111111111111");
                    returnMark.add(i);
                } else {
                    msg.what = 2;
                    Log.i("mark", "22222222222222");
                    returnMark.remove(i);
                }
                handler.sendMessage(msg);
            }
        });

        return view;
    }

    public HashSet remark() {
        return returnMark;
    }
}
class DayTimeHolder{
    public CheckBox checkBox;//多选按钮
    public TextView timeName;//时间名称
}

这里就是 直接初始化gridview结构。里面用到的handler和message是动态更新选中状态的需要啦。好久没写过这些了,我们这行除了技术就是经验了积累。唉,怎么越学感觉自己越懒。。。。

时间: 2024-12-20 22:28:32

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

gridview自定义分页 aspNetPager用法

这几天做gridview分页,自带的分页不好用.从网上搜刚开始搜了一个aspNetPager.dll,替换原来的一个dll,自己设置了一些,比如这个控件不显示中文,后来我改成中文的"上一页"."下一页"."首页""尾页",把ShowPageIndexBox设置为默认true,这样当前页也显示了,还能跳转. 还设置了 显示自定义区域,默认是不显示了,我改成left,然后再设置下自定义的html,结果就可以显示了,我显示的是 一共

Toast拓展--自定义显示时间和动画

Toast拓展–自定义显示时间和动画 我们在Android应用开发中经常会需要在界面上弹出一个对界面操作无影响的小提示框来提示用户一些信息,这时候一般都会使用Android原生的Toast类 Toast.makeText(mContext, "消息内容", Toast.LENGTH_SHORT).show(); 一开始觉得,挺好用的,就有点什么消息都用Toast显示了. 但是用久了就发现,Toast的显示和消失动画不符合自己的要求,显示时间也只有SHORT和LONG两种选择,好像不太够

Nagios自定义报警时间

Nagios自定义报警时间 遇到需要自定义检查和报警时间的,总结一下.大家集思广益,不断完善. 常调用的模板配置文件: efine service{ name                           generic-service         ; 定义一个服务名称 active_checks_enabled          1                       ; Activeservice checks are enabled passive_checks_enab

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

找了很多的资料,都没有windows做时间服务,linux同步windows的时间的,最后自己找了一些软件,终于搞定了,写出来给大家共享,以免大家多走弯路首先在http://www.meinberg.de/english/sw/index.htm下载了一个windows的NTP服务程序:ntp4171.zipwindows 192.168.1.321.安装是提示设置服务器地址,我设置的本机widows机器的IP2.ntpd的控制在:控制面板->;管理工具->;组件服务-NetworkTimeP

2014-2015年终总结——做时间的主人

写这篇总结的时候,窗外下着雪,分外明亮. 此时此刻的我,看着日历,已经是2015年的2月末. 时间飞逝,多想做个时间的主人! 回顾自己过去的2014年,未免有些神伤. 细细想来,那些如意的,不如意的,快乐的,抑或是忧愁的,不过是时间弄人. 关键词:遗憾      在2014年,想结束很多事情: 机房收费系统合作版 B/S的学习 专业课的毕业论文实验 可是它们都因为这样或那样的原因没有结束,留到了2015年. 点评:虽然这些事情没完成,有些客观原因,但主要还是自己没有做好计划,没有利用好今目标和日

HighCharts 图表插件 自定义绑定 时间轴数据

HighCharts 图表插件 自定义绑定 时间轴数据,解决时间轴自动显示数据与实际绑定数据时间不对应问题! 可能要用到的源码片段:http://code.662p.com/list/14_1.html     学习示例如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quo

我是这样做时间管理的(下)

我都用时间记录法记录哪些 在上篇我是这样做时间管理的(上)中,我讲了我是怎么做时间记录法的, 以及使用时间记录法后对我的影响, 但很多初学时间记录法的朋友,包括之前的我, 会比较疑惑一个问题, 那就是我需要去记录哪些内容? 在刚开始做时间记录法时, 我是把当天几乎所有事情都记录下来了, 比如洗脸刷牙, 坐地铁等等, 因为当时我也不太清楚去记录什么, 所以想着干脆全部记录下来, 等记录一段时间后自然就知道该记录什么了, 比干在那想要好得多 通过全部记录的方式, 一段时间后我就有些崩溃了, 记录这些

微信小程序picker-view自定义日期时间等

picker-view 可以自定义地区时间什么的,其实主要是可以修改样式啦. <view class='login-user border-none' bindtap='data_click'> <view class='user-t'>生日</view> <view class='user-i'> <input placeholder="请输入生日" disabled value='{{birthday}}' /> <

一起学微软Power BI系列-使用技巧(5)自定义PowerBI时间日期表

1.日期函数表作用 经常使用Excel或者PowerBI,Power Pivot做报表,时间日期是一个重要的纬度,加上做一些钻取,时间日期函数表不可避免.所以今天就给大家分享一个自定义的做日期表的方法,当然自己使用Excel用公式做一个也很快,八仙过海各显神通.我对C#比较了解,就用自己最了解的方式做了一个.大家可以自己扩充,或者可以把需求提供我,我统一完善.比如下面这个表(来自一个Power Pivot课程). 本文原文地址:http://www.cnblogs.com/asxinyu/p/P