当前位置:网站首页>gridView自己定义做时间排版「建议收藏」
gridView自己定义做时间排版「建议收藏」
2022-07-07 20:57:00 【全栈程序员站长】
大家好,又见面了,我是全栈君。
公司有需求要做一个时间排版,原型例如以下
由于要用的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是动态更新选中状态的须要啦。
好久没写过这些了,我们这行除了技术就是经验了积累。
唉。怎么越学感觉自己越懒。。
。
。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/116279.html原文链接:https://javaforall.cn
边栏推荐
- 刚开户的能买什么股票呢?炒股账户安全吗
- 字符串中数据排序
- Details of C language integer and floating-point data storage in memory (including details of original code, inverse code, complement, size end storage, etc.)
- C语言多角度帮助你深入理解指针(1. 字符指针2. 数组指针和 指针数组 、数组传参和指针传参3. 函数指针4. 函数指针数组5. 指向函数指针数组的指针6. 回调函数)
- Tensorflow2. How to run under x 1 Code of X
- Phoenix JDBC
- SQL注入报错注入函数图文详解
- 机械臂速成小指南(十二):逆运动学分析
- Codeforces 474 F. Ant colony
- 数值法求解最优控制问题(〇)——定义
猜你喜欢
CodeSonar如何帮助无人机查找软件缺陷?
ERROR: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your
H3C s7000/s7500e/10500 series post stack BFD detection configuration method
Implement secondary index with Gaussian redis
Tensorflow2.x下如何运行1.x的代码
Optimization cases of complex factor calculation: deep imbalance, buying and selling pressure index, volatility calculation
【C语言】指针进阶---指针你真的学懂了吗?
ISO 26262 - 基于需求测试以外的考虑因素
测量楼的高度
上海交大最新《标签高效深度分割》研究进展综述,全面阐述无监督、粗监督、不完全监督和噪声监督的深度分割方法
随机推荐
Prometheus remote_write InfluxDB,unable to parse authentication credentials,authorization failed
OneSpin 360 DV新版发布,刷新FPGA形式化验证功能体验
H3C S7000/S7500E/10500系列堆叠后BFD检测配置方法
Solve the problem that the executable file of /bin/sh container is not found
How does codesonar help UAVs find software defects?
凌云出海记 | 赛盒&华为云:共助跨境电商行业可持续发展
Do you have to make money in the account to open an account? Is the fund safe?
object-c编程tips-timer「建议收藏」
easyui 日期控件清空值
Klocwork code static analysis tool
寫一下跳錶
sqlHelper的增删改查
死锁的产生条件和预防处理[通俗易懂]
Details of C language integer and floating-point data storage in memory (including details of original code, inverse code, complement, size end storage, etc.)
使用高斯Redis实现二级索引
Codesonar enhances software reliability through innovative static analysis
华为CE交换机下载文件FTP步骤
Mongodb learn from simple to deep
openGl超级宝典学习笔记 (1)第一个三角形「建议收藏」
ERROR: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your