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;//多选button
- public TextView timeName;//时间名称
- }
这里就是 直接初始化gridview结构。
里面用到的handler和message是动态更新选中状态的须要啦。
好久没写过这些了,我们这行除了技术就是经验了积累。
唉。怎么越学感觉自己越懒。。
。
。
gridView自己定义做时间排版的更多相关文章
- JS对象 Date 日期对象 日期对象可以储存任意一个日期,并且可以精确到毫秒数(1/1000 秒)。 定义一个时间对象 : var Udate=new Date();Date()的首字母须大写
Date 日期对象 日期对象可以储存任意一个日期,并且可以精确到毫秒数(1/1000 秒). 定义一个时间对象 : var Udate=new Date(); 注意:使用关键字new,Date()的首 ...
- 用R做时间序列分析之ARIMA模型预测
昨天刚刚把导入数据弄好,今天迫不及待试试怎么做预测,网上找的帖子跟着弄的. 第一步.对原始数据进行分析 一.ARIMA预测时间序列 指数平滑法对于预测来说是非常有帮助的,而且它对时间序列上面连续的值之 ...
- iOS-自定义起始时间选择器视图
概述 自定义起始时间选择器视图, 调起时间选择器, 传值(起始时间/截止时间), 两者时间均要合理, 不能超过未来时间, 并且起始时间不能大于截止时间. 点击取消或空白处收起时间选择器. 详细 代码下 ...
- PHP使用DateTime类做时间日期到字符串转换
PHP关于时间日期的处理不是很规范,简单就简单了,就是不知道输入的字符串是否能够正确转化为需要的DateTime类型. 面向对象的PHP应该使用DateTime类来做string和dateTime的转 ...
- windows做时间服务器,linux和windows时间同步
找了很多的资料,都没有windows做时间服务,linux同步windows的时间的,最后自己找了一些软件,终于搞定了,写出来给大家共享,以免大家多走弯路 首先在http://www.meinberg ...
- 如何使用Omnifocus做时间管理 4 多项目管理
这一篇和大家分享作为一个管理者,可能遇到的时间管理挑战和如何用omnifocus应对这些挑战. 张经理在一家IT公司上班,从程序员开始打拼了5年,凭借权威的技术能力当上了项目经理,同时管理三个项目,苦 ...
- 第二章 Vue快速入门-- 25 过滤器-定义格式化时间的全局过滤器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- GridView利用PagerTemplate做分页显示设置上一页下一页转到下拉转页
效果如图: 代码如下: aspx页: <asp:GridView ID="GridViewMain" runat="server" OnPageIndex ...
- Android全局异常处理 实现自己定义做强制退出和carsh日志抓取
在做android项目开发时,大家都知道都会遇到程序报错或者Anr异常,会弹出来一个强制退出的弹出框,对于开发人员是好事,但是对于用户体验和 UI实在毫无违和感,别说用户接受不了,就连我们自己本身可能 ...
随机推荐
- redis(二)redis+TCMALLOC高性能的缓存服务器的安装配置
安装 1准备编译环境 yum -y install gcc gcc+ gcc-c++ openssl openssl-devel pcre pcre-devel 2 下载源码包(由于goog ...
- Json也可以这么使
public string GetJSON() { //Json数据 string json112 = "{\"control_info\":{\"imei\& ...
- 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 ...
- DHTML【11】--DOM
大家好,从今天开始,我们将进入DOM的学习. DOM?DOM是何东东呢?大家还记得我在前面提过的DOM树吗?就是我在前面讲HTML的时候画的那个图,那个其实就是一个简单的DOM树,浏览器在解析HTML ...
- Android学习笔记之View(一):LayoutInflater
使用LayoutInflater加载布局的两种方式: 第一种: LayoutInflater inflater=LayoutInflater.from(context); inflater.infla ...
- 使用ant的war任务打包j2ee web项目
<?xml version="1.0" encoding="UTF-8"?> <project name="antwebprojec ...
- CentOS6.5+php5.3听云安装过程
听云安装过程请参考听云安装指导页面:http://doc.tingyun.com/help/html/doc/server_novice.html 根据自己的服务器系统和语言包下载对应的 安装包 安装 ...
- Python常用模块中常用内置函数的具体介绍
Python作为计算机语言中常用的语言,它具有十分强大的功能,但是你知道Python常用模块I的内置模块中常用内置函数都包括哪些具体的函数吗?以下的文章就是对Python常用模块I的内置模块的常用内置 ...
- 在mac os 中安装 autoconf and automake
转载地址:http://www.mattvsworld.com/blog/2010/02/install-the-latest-autoconf-and-automake-on-mac-os-10-6 ...
- DNS与网站优化
点就出现了这样的问题,导致了几小时的访问失败,所以选择优秀的DNS服务器势必关系网站发展的生死存亡.本文做以下分析. 选择良好的DNS服务器要从选择域名注册商说起,在注册域名时多数人看中的仅仅 ...