updateListView(new String[]{“tip”,“time”},new String[]{tip,thetime},position);
//更新数据库信息
String theclass=TipUtil.getTheclass(position);
sd.updateValue(“Time”,theclass,thetime);
//更新timelist
timelist.set(position,thetime);
}
},STime.getTime(timelist.get(position)).getHour(),STime.getTime(timelist.get(position)).getMinutes(),true).show();
}
//设置开学日期
public void setData(final int position) {
new DatePickerDialog(SetTime.this, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
String tip = “开学日期”;
//月份要+1
String thedata = SData.getDataBack(new SData(year, month + 1, dayOfMonth));
updateListView(new String[]{“tip”, “time”}, new String[]{tip, thedata}, position);
sd.updateValue(“Data”, “1-2”, thedata);
Data = thedata;
}
},SData.getData(Data).getYear(),SData.getData(Data).getMonth(),SData.getData(Data).getDayOfMonth()).show();
}
//设置提醒时间
public void setTiptime(final int position) {
new AlertDialog.Builder(SetTime.this)
.setTitle(“请设置提醒时间”)
.setSingleChoiceItems(new String[]{“5分钟”,“10分钟”,“15分钟”,“20分钟”,“不提醒”},0,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String a=“”;
switch (which){
case 0:
case 1:
case 2:
case 3:
a=(which+1)*5+“”;
break;
case 4:
a=“不提醒”;
break;
}
updateListView(new String[]{“tip”,“time”},new String[]{“提醒时间”,a},position);
sd.updateValue(“Data”,“5-6”,a);
dialog.dismiss();
}
}).show();
}
//设置主题
public void settheme(final int position) {
new AlertDialog.Builder(SetTime.this)
.setTitle(“请设置主题风格”)
.setSingleChoiceItems(new String[]{“阿狸”,“DOTA”},0,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String a=“”;
switch (which){
case 0:
a=“阿狸”;
break;
case 1:
a=“Dota”;
break;
}
updateListView(new String[]{“tip”,“time”},new String[]{“主题风格”,a},position);
sd.updateValue(“Data”,“3-4”,which+“”);
dialog.dismiss();
}
}).show();
}
//更新界面
private void updateListView(String[] strings, String[] strings1, int position) {
//往listview上更新信息使用map对list更新数据
Map<String,Object> map =new HashMap<String,Object>();
for(int i=0;i<strings.length;i++){
map.put(strings[i],strings1[i]);
}
list.set(position,map);
adapter.notifyDataSetChanged(); //list更新后的绑定操作,是对item的强制刷新
}
在SetTime页面中点击“下一步”,来到SetDay界面,注意要在MainFest文件中添加新的有布局文件的类,SetDay页面布局如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uqpozQZ6-1587976582895)(https://img-blog.csdn.net/20171216204159286?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcmlra2F0aGV3b3JsZA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)]
SetDay页面有个功能,就是可以通过左滑和右滑来转到下一天或前一天
主要是实现了接口 OnTouchListener和OnGestureListener
重写onFling和onTouch方法实现左滑右滑实现页面变化如下:
//其中e1.getX()为滑动的前一个点,e2.getX()为后一个点
//velocityX()为滑动的速度,单位大概是像素每单位时间,可能为负数所以用的时候要加一个abs
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
//左滑动
if(e1.getX()-e2.getX()>100&&Math.abs(velocityX)>200){
setWeek(week+1);
tiptext.setText(weektip);
}
//右滑动
if(e2.getX()-e1.getX()>100&&Math.abs(velocityX)>200){
setWeek(week-1);
tiptext.setText(weektip);
}
return false;
}
public boolean onTouch(View v, MotionEvent event) {
return mGestureDetector.onTouchEvent(event);
}
别的代码就是实现给ListView配置适配器,然后页面本来是什么都没有的,我们要通过点击某节课来设置上课信息,跳转到SetClass页面,从SetClass页面设置完以后回到SetDay页面,这里用到了数据的传送,是android特别常见并且实用的一个方法,下面是一些代码:
//初始化listview数据
private void getDate(String day) {
list.clear();
ArrayList classlist=new ArrayList();
Cursor c=sd.getWeekValue(day);
while (c.moveToNext()){
classlist.add(c.getString(0));
}
Map<String,Object> map;
SClass classinfo;
for(int i=0;i<6;i++){
map=new HashMap<String,Object>();
classinfo=SClass.getInformation(classlist.get(i));
map.put(“tip”,TipUtil.getTipWithFormate(i));
map.put(“classname”,classinfo.getTheclass());
map.put(“classplace”,classinfo.getTheplace());
list.add(map);
}
classlist.clear();
}
//设置星期
public void setWeek(int week) {
this.week = week;
String day=“”; //用于使用getdate方法
switch (week){
case 0:
this.week=6;
weektip=“星期六”;
day=“Sar”;
break;
case 1:
weektip=“星期一”;
day=“Mon”;
break;
case 2:
weektip=“星期二”;
day=“Tue”;
break;
case 3:
weektip=“星期三”;
day=“Wed”;
break;
case 4:
weektip=“星期四”;
day=“Thu”;
break;
case 5:
weektip=“星期五”;
day=“Fri”;
break;
case 6:
weektip=“星期六”;
day=“Sar”;
break;
case 7:
this.week=1;
weektip=“星期一”;
day=“Mon”;
break;
}
getDate(day);
list.clear();
adapter.notifyDataSetChanged();
}
//比较重要的输送数据
class MyListener implements AdapterView.OnItemClickListener{
//点击后进入setclass页面,然后等待回传数据,返回此页面
//因为涉及到回传数据,所以使用bundle函数
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Bundle bundle=new Bundle();
//用户的点击设置,对应着一天中的某节课
bundle.putInt(“theclass”,position);
theclass=position;
//星期几
bundle.putInt(“theweek”,week);
Intent intent=new Intent();
intent.setClass(SetDay.this,SetClass.class);
intent.putExtras(bundle);
//等待数据回传
startActivityForResult(intent,0);
}
}
/*因为使用数据输送,所以页面切换的时候不使用StartActivity而是使用 startActivityForResult(intent,0);
因为在SetClass使用完后数据回到SetDay的时候会通过startActivityForResult而调用onActivityResult方法,因为回来的时候要把新的数据给显示在页面上,所以要重写onActivityResult方法更新几面/
protected void onActivityResult(int requestCode,int resultCode,Intent data){
switch (resultCode){
case 1:
//更新ListView的信息
Bundle bundle=data.getExtras();
String information=bundle.getString(“information”);
Map<String,Object> map=new HashMap<String,Object>();
String tip=TipUtil.getTipWithFormate(theclass);
map.put(“tip”,tip);
SClass classInfo=SClass.getInformation(information);
map.put(“classname”,classInfo.getTheclass());
map.put(“classplace”,classInfo.getTheplace());
list.set(theclass,map);
adapter.notifyDataSetChanged();
}
}
SetClass布局文件如图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CVWRLUSo-1587976582898)(https://img-blog.csdn.net/20171216205713378?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcmlra2F0aGV3b3JsZA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)]
点击课名、地点会出现一个dialog写信息到Textview中去,周次可以选择单周,双周,每周和自定义xx-xx周
在配置完listview后,点击事件如下:
//编辑课名
private void showClassNameDialog(final int position) {
final EditText esitText=new EditText(SetClass.this);
new AlertDialog.Builder(SetClass.this).setTitle(“设置课程名字”)
.setIcon(R.drawable.ic_launcher_background)
.setView(esitText)
.setPositiveButton(“确定”, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
className=" "+esitText.getText().toString();
updateListView(new String[]{“tip1”,“editcontent”},new String[]{“课名”,className},position);
}
}).setNegativeButton(“取消”,null)
.show();
}
//编辑地名
private void showClassPlaceDialog(final int position) {
final EditText esitText=new EditText(SetClass.this);
new AlertDialog.Builder(SetClass.this).setTitle(“设置上课地点”)
.setIcon(R.drawable.ic_launcher_background)
.setView(esitText)
.setPositiveButton(“确定”, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
classPlace=" "+esitText.getText().toString();
updateListView(new String[]{“tip1”,“editcontent”},new String[]{“地点”,classPlace},position);
}
}).setNegativeButton(“取消”,null)
.show();
}
//编辑周次,略长,= =主要是自定义要写很多
private void showWeekPickerDialog(final int position) {
new AlertDialog.Builder(SetClass.this)
.setTitle(“请选择周次”)
.setSingleChoiceItems(new String[]{“单周”,“双周”,“全部”,“自定义”}, 0,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
String value=“”;
switch (i){
case 0:
value =" 单周";
weekTime=1;
break;
case 1:
value =" 双周";
weekTime=2;
break;
case 2:
value =" 全部";
weekTime=0;
break;
case 3:
//选择开始周次和结束周次
showWeekDetailPickerDialog(i);
break;
}
updateListView(new String[]{“tip1”,“editcontent”},new String[]{“周次”,value},position);
dialogInterface.dismiss();
}
//使用hashset来存放已经选择的周次
private void showWeekDetailPickerDialog(int i) {
final HashSet choice=new HashSet();
final String[] values={“1”,“2”,“3”,“4”,“5”,“6”,“7”,“8”,“9”,“10”,“11”,“12”,“13”,“14”,“15”
,“16”,“17”,“18”,“19”,“20”,“21”,“22”,“23”,“24”,“25”};
new AlertDialog.Builder(SetClass.this)
.setTitle(“请选择开始周次和结束周次”)
.setMultiChoiceItems(values, null, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i, boolean b) {
if(b){
choice.add(i+1);
}
else choice.remove(i+1);
}
})
.setPositiveButton(“确定”, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
if(choice.size()==2){
//选中两个
Object object[]=choice.toArray();
String value=Math.min((Integer)object[0],(Integer)object[1])
+“-”+Math.max((Integer)object[0],(Integer)object[1]);
updateListView(new String[]{“tip1”,“editcontent”},new String[]{“周次”,value},position);
weekTime=Math.min((Integer)object[0],(Integer)object[1])*1000
+Math.max((Integer)object[0],(Integer)object[1]);
dialogInterface.dismiss();
}
else {
new AlertDialog.Builder(SetClass.this)
.setTitle(“注意”)
.setMessage(“请选择两个选项”)
.setPositiveButton(“确定”,null)
.show();
}
choice.clear();
}
})
.setNegativeButton(“取消”,null).show();
}
})
.setPositiveButton(“确定”,null)
.setNegativeButton(“取消”,null)
.show();
}
//更新列表视图
private void updateListView(String[] strings, String[] strings1, int position) {
Map<String,Object>map=new HashMap<String,Object>();
for(int i=0;i<strings.length;i++){
map.put(strings[i],strings1[i]);
}
list.set(position,map);
adapter.notifyDataSetChanged();
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
尾声
对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。 整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
最后想要拿高薪实现技术提升薪水得到质的飞跃。最快捷的方式,就是有人可以带着你一起分析,这样学习起来最为高效,所以为了大家能够顺利进阶中高级、架构师,我特地为大家准备了一套高手学习的源码和框架视频等精品Android架构师教程,保证你学了以后保证薪资上升一个台阶。
- 思维脑图
- 性能优化学习笔记
- 性能优化视频
当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
尾声
对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。 整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
最后想要拿高薪实现技术提升薪水得到质的飞跃。最快捷的方式,就是有人可以带着你一起分析,这样学习起来最为高效,所以为了大家能够顺利进阶中高级、架构师,我特地为大家准备了一套高手学习的源码和框架视频等精品Android架构师教程,保证你学了以后保证薪资上升一个台阶。
- 思维脑图
[外链图片转存中…(img-AcH1Inb4-1713781154470)] - 性能优化学习笔记
[外链图片转存中…(img-cMTMRk1R-1713781154471)]
[外链图片转存中…(img-TL9GSVfC-1713781154471)]
[外链图片转存中…(img-6a4bjDTC-1713781154472)]
[外链图片转存中…(img-FlnWCmEH-1713781154473)]
- 性能优化视频
[外链图片转存中…(img-lZngzAFF-1713781154474)]
当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!