当前位置:网站首页>GridView defines its own time for typesetting "suggestions collection"
GridView defines its own time for typesetting "suggestions collection"
2022-07-07 21:00:00 【Full stack programmer webmaster】
Hello everyone , I meet you again , I'm the king of the whole stack .
The company needs to do a time typesetting , Prototypes such as the following
Because of the gridView, There used to be a lot of typesetting , Most of all, I want to use one checkbox Get it done .
Later it was proved that the function could be achieved . But the layout is messy . It's better to write more honestly ( Go straight to the code )
What's wrong with bad technology? Please correct it
The first is the home page :
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() + "");
}
}
});
}
}
Mainly Used to pass in the representation array And accept to return the selected logo
Define your own 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;// No sliding
}
return super.dispatchTouchEvent(ev);
}
}
Here is Lailai no sliding It's just onMeasure Method It's just that you need to set the height and width in the code later
Finally, the adapter :
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;// multi-select button
public TextView timeName;// Time name
}
Here is the Direct initialization gridview structure .
It's used in handler and message It is necessary to dynamically update the selected status .
I haven't written this for a long time , In addition to technology, our industry has accumulated experience .
alas . The more you learn, the lazier you feel ..
.
.
Publisher : Full stack programmer stack length , Reprint please indicate the source :https://javaforall.cn/116279.html Link to the original text :https://javaforall.cn
边栏推荐
- 恶魔奶爸 B2 突破语法,完成正统口语练习
- Helix QAC 2020.2新版静态测试工具,最大限度扩展了标准合规性的覆盖范围
- 嵌入式系统真正安全了吗?[ OneSpin如何为开发团队全面解决IC完整性问题 ]
- Is it safe to open a stock account at present? Can I open an account online directly.
- Codesonar Webinar
- 反诈困境,国有大行如何破局?
- CodeSonar网络研讨会
- Lex & yacc of Pisa proxy SQL parsing
- Data sorting in string
- Jetty:配置连接器[通俗易懂]
猜你喜欢
Make this crmeb single merchant wechat mall system popular, so easy to use!
如何满足医疗设备对安全性和保密性的双重需求?
CodeSonar网络研讨会
万字总结数据存储,三大知识点
How to meet the dual needs of security and confidentiality of medical devices?
C language helps you understand pointers from multiple perspectives (1. Character pointers 2. Array pointers and pointer arrays, array parameter passing and pointer parameter passing 3. Function point
CodeSonar通过创新型静态分析增强软件可靠性
AADL inspector fault tree safety analysis module
Codesonar Webinar
Cantata9.0 | new features
随机推荐
华泰证券可以做到万一佣金吗,万一开户安全嘛
[function recursion] do you know all five classic examples of simple recursion?
Details of C language integer and floating-point data storage in memory (including details of original code, inverse code, complement, size end storage, etc.)
Measure the height of the building
恶魔奶爸 B3 少量泛读,完成两万词汇量+
Lingyun going to sea | yidiantianxia & Huawei cloud: promoting the globalization of Chinese e-commerce enterprise brands
恶魔奶爸 A1 语音听力初挑战
凌云出海记 | 易点天下&华为云:推动中国电商企业品牌全球化
Implement secondary index with Gaussian redis
SQL注入报错注入函数图文详解
I have to use my ID card to open an account. Is the bank card safe? I don't understand it
FTP steps for downloading files from Huawei CE switches
95年专注安全这一件事 沃尔沃未来聚焦智能驾驶与电气化领域安全
Codeforces round 296 (Div. 2) A. playing with paper[easy to understand]
软件缺陷静态分析 CodeSonar 5.2 新版发布
[matrix multiplication] [noi 2012] [cogs963] random number generator
使用高斯Redis实现二级索引
Small guide for rapid formation of manipulator (12): inverse kinematics analysis
万字总结数据存储,三大知识点
恶魔奶爸 指南帖——简易版