AndroidStdio 关于课程表的小项目(1)

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开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
,map);

adapter.notifyDataSetChanged();

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-RM17Pq3g-1715379397657)]

[外链图片转存中…(img-g78RLaOk-1715379397658)]

[外链图片转存中…(img-zul77DHV-1715379397659)]

[外链图片转存中…(img-NDkVi8Ih-1715379397660)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 28
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值