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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Node.js excel转json

    Node.js excel转json这个是8月初做的,之前公司项目需要国际化,在项目本地会有两份json数据,一个中文的一个英文的,但是公司产品经理提供的数据是excel格式,需要我们自己转一次。最初几次数据量不大,一次50条左右,我都是手动的添加了几次,后来发现不行,每次这么搞容易出错且比较耗时,就写了这么一个工具,使用起来效率倍增,启动运行一下这个项目,然后粘贴复制即可。其实使用Node.js把excel转成json很简单…

    2022年6月7日
    101
  • python怎么表示取余_python如何实现取余操作[通俗易懂]

    python怎么表示取余_python如何实现取余操作[通俗易懂]python实现取余操作的方法:可以利用求模运算符(%)来实现。求模运算符可以将两个数相除得到其余数。我们还可以使用divmod()函数来实现取余操作,具体方法如:【divmod(10,3)】。在python中要实现取余操作可以使用求模运算符(%),该运算符可以将两个数相除得到其余数。(推荐教程:Python入门教程)如果一个数恰好能被另外一个数据整除,则余数为0,%运算后返回结果为0。可利用余数…

    2022年4月25日
    77
  • TCP的拥塞控制(详解)「建议收藏」

    TCP的拥塞控制(详解)「建议收藏」在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况就叫做网络拥塞。在计算机网络中数位链路容量(即带宽)、交换结点中的缓存和处理机等,都是网络的资源。若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降。当输入的负载到达一定程度吞吐量不会增加,即一部分网络资源会丢失掉,网络的吞吐量维持在其所能控制的最大值,转发节点的缓存不够大这造成分…

    2022年6月24日
    27
  • Mac下查看已安装的jdk版本及其安装目录[通俗易懂]

    Mac下查看已安装的jdk版本及其安装目录[通俗易懂]最近在学习JVM,需要运行jdk自带的命令行,需要在特定jdk目录下进行,所以需要查看jdk安装目录,之前也查过,忘记了。这次记录下来为以后备用。1、打开终端,输入:/usr/libexec/java_home-V   注意:输入命令参数区分大小写(-v是不对的,必须是-V)如图:3个红框内依次为:输入命令;当前Mac已安装jdk目录;Mac默认使用的jdk版本;

    2025年11月30日
    8
  • python解释器安装步骤_怎么安装python解释器

    python解释器安装步骤_怎么安装python解释器Python目前已支持所有主流操作系统,在Linux,Unix,Mac系统上自带Python环境,在Windows系统上需要安装一下,超简单。1、下载python首先,根据你的Windows版本(64位还是32位)从Python的官方网站下载Python3.7对应的64位安装程序或32位安装程序(网速慢的同学请移步国内镜像),然后,运行下载的EXE安装包:2、运行Python安装成功后,打开命令…

    2022年7月22日
    16
  • quota的使用方法

    from:http://man.chinaunix.net/linux/how/Quota.html   序言:这份文件的版权由AlbertM.C.Tam(bertie@scn.org)所保留。同意这份文件的使用、复制,因此非商业性的散布是允许的,但是所有的拷贝以及/或是没有修改直接援用的文件上须有作者与编者的名字及这份注意事项。这份文件是因为希望能有所帮助

    2022年4月8日
    50

发表回复

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

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