公司有需求要做一个时间排版,原型如下
因为要用的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是动态更新选中状态的需要啦。好久没写过这些了,我们这行除了技术就是经验了积累。唉,怎么越学感觉自己越懒。。。。
时间: 2024-12-20 22:28:32