gridView自定义做时间排版

来源:互联网 发布:cmd mysql 命令 编辑:程序博客网 时间:2024/06/05 04:07

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



因为要用的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是动态更新选中状态的需要啦。好久没写过这些了,我们这行除了技术就是经验了积累。唉,怎么越学感觉自己越懒。。。。



0 0