gridView自己定义做时间排版「建议收藏」

gridView自己定义做时间排版

大家好,又见面了,我是全栈君。

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

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自己定义做时间排版「建议收藏」

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116279.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 五大分布式事务,你了解多少?

    五大分布式事务,你了解多少?

    2020年11月20日
    341
  • SQLyog中文版安装教程「建议收藏」

    SQLyog中文版安装教程「建议收藏」基本简介SQLyog中文版是一款专业的图形管理软件,SQLyog操作简单,功能强大,能够帮助用户轻松管理自己的MYSQL数据库,SQLyog中文版支持多种数据格式导出,可以快速帮助用户备份和恢复数据,还能够快速地运行SQL脚本文件,为用户的使用提供便捷。相似软件版本说明软件地址 xampp下载 7.1.8win32 查看 xampp 7.1.8w…

    2022年5月28日
    259
  • 解决Unable to connect to Redis server: 192.168.110.1/192.168.110.1:6379[通俗易懂]

    解决Unable to connect to Redis server: 192.168.110.1/192.168.110.1:6379[通俗易懂]出现场景:springboot整合redis,启动项目时出现原因:redis的一系列配置不正确解决方案:首先在window安装redis,找到安装目录下的redis.windows.confredis.windows-service.conf1)修改protected-modeyes改为:protected-modeno2)注释掉#bin127.0.0.13…

    2022年6月5日
    275
  • java 分布式计算框架_java分布式系统框架的分类「建议收藏」

    java 分布式计算框架_java分布式系统框架的分类「建议收藏」鲁班学院java架构师成长路线随着电商行业的崛起,越来越多的人为了省事更习惯网购,今天我们就来熟悉Java分布式系统中的Dubbo,Dubbo就是来解决Java分布式系统中间的子系统之间相互调用相互协作的一个框架。在Dubbo之前就有一个Java分布式系统框架RPC(远程过程调用),多个子系统之间需要实现相互调用必须要借助网络来表达调用的语义和传达调用的数据,RPC采用客户机/服务器模式。请求程序…

    2022年5月31日
    56
  • jvm基础_java实现栈四个方法

    jvm基础_java实现栈四个方法JVM进阶(一)——初识JAVA栈  若想使自己编写的Java程序高效运行,以及进行正确、高效的异常诊断,JVM是不得不谈的一个话题。本”JVM进阶“专栏大部分内容均来源于经典书籍《深入理解Java虚拟机》。  下面言归正传,本文重点从虚拟机内存模型(运行时数据区域)入手。先看图:  这是一张比较官方的虚拟机模型图,今天讲的就是虚线框中栈的部分。  栈是我们最常用的内存区域。它主

    2022年9月6日
    6
  • 斗鱼主播都在使用的可取回的CSGO开箱子网站推荐!「建议收藏」

    斗鱼主播都在使用的可取回的CSGO开箱子网站推荐!「建议收藏」斗鱼主播都在使用的可取回的CSGO开箱子网站推荐!incsgo能直接取回皮肤的CSGO饰品皮肤开箱网站官方链接:www.incsgo.gg注册登录自动免费获得$1.00美金优惠码:csgogo(充值使用csgogo可增加5%充值金额)支付:微信支付宝状态:直接取回skinsdog狗网CSGO饰品皮肤开箱网站可直接取回官方链接:skinsdog.cc注册登录自动免费获得$0.8美金推广码:csgogo(注册使用送0.8美金)支付:微信支付宝状态:直.

    2022年10月4日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号