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 esit
Text=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();
}
//点击事件回传数据
class MyButtonListener implements Button.OnClickListener {
@Override
public void onClick(View v) {
int i=v.getId();
switch (i){
//回传数据
case R.id.donebutton:
String message=SClass.getInformationBack(new SClass(className,classPlace,weekTime));
sd.updateValue(theweek,theclass,message);
Toast.makeText(SetClass.this,message,Toast.LENGTH_SHORT).show();
Intent intent=SetClass.this.getIntent();
intent.putExtra(“information”,message);
SetClass.this.setResult(1,intent);
intent.setClass(SetClass.this,SetDay.class);
SetClass.this.finish();
break;
case R.id.cancelbutton:
ButtonListener implements Button.OnClickListener {
@Override
public void onClick(View v) {
int i=v.getId();
switch (i){
//回传数据
case R.id.donebutton:
String message=SClass.getInformationBack(new SClass(className,classPlace,weekTime));
sd.updateValue(theweek,theclass,message);
Toast.makeText(SetClass.this,message,Toast.LENGTH_SHORT).show();
Intent intent=SetClass.this.getIntent();
intent.putExtra(“information”,message);
SetClass.this.setResult(1,intent);
intent.setClass(SetClass.this,SetDay.class);
SetClass.this.finish();
break;
case R.id.cancelbutton: