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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Kafka 是什么?

    Kafka 是什么?前言本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!本专栏目录结构和参考文献请见1000个问题搞定大数据技术体系正文Kafka的诞生背景2011年年初,美国领英公司(Linkedin)开源了一款基础架构软件,以奥地利作家弗兰兹・卡夫卡(FranzKafka)的名字命名。之后Linkedin将其贡献给Apache基金会,随后该软件于2012年10月成功完成孵化并顺利晋升为Apache

    2022年10月13日
  • 使用PyCharm快速安装TensorFlow

    使用PyCharm快速安装TensorFlow本来之前写的《使用VirtualEnv在Mac安装TensorFlow》已经搭建好TensorFlow学习环境了,后来发现使用PyCharm搭建TensorFlow学习环境简直不要太方便了,就重新搭建了一遍!启动PyCharm,创建一个新项目,选择Newenvironmentusing->VirtualEnv,这样就是单独为新项目创建一个隔离的python环境。创建好新项目以后…

  • 【目标检测】RCNN算法详解[通俗易懂]

    【目标检测】RCNN算法详解[通俗易懂]深度学习用于目标检测的RCNN算法

    2022年10月13日
  • css怎么设置注释快捷键,html中注释的快捷键是

    css怎么设置注释快捷键,html中注释的快捷键是html中注释的快捷键是command或ctrl+/超文本标记语言(HyperTextMarkupLanguage),标准通用标记语言下的一个应用。HTML不是一种编程语言,而是一种标记语言(markuplanguage),是网页制作所必备的。“超文本”就是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。超文本标记语言(或超文本标签语言)的结构包括“头”部分、和“主体”部分,其中“…

  • vue富文本编辑器插件推荐_vue富文本编辑器的使用

    vue富文本编辑器插件推荐_vue富文本编辑器的使用vue富文本编辑器,插件

    2022年10月14日
  • System.ArgumentException: 回发或回调参数无效。在配置中使用 < pages enableEventValidation=”true”/>

    System.ArgumentException: 回发或回调参数无效。在配置中使用 < pages enableEventValidation=”true”/>关于在同一个页面中使用Gridview控件的时候发现气updaeting事件无法被服务器所响应,看来它的错误报警然后查询了部分资料现在将整理的解决方法总结如下:点击update事件无法响应原因出在回发或回调参数无效。在配置中使用或在页面中使用启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用Clie

发表回复

您的电子邮箱地址不会被公开。

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