实例介绍
规划功能
用户可以在前一天晚上做好第二天的规划,添加必要的任务事项,包括任务描述,任务的紧迫性(重要紧迫、重要不紧迫、紧迫不重要、不紧迫不重要),截止时间,并且可以添加一张相关的图片作为提示。
提醒功能
用户可以为每个事项添加提醒功能,每当截止时间到的时候,DayPlan给出一个简短的提醒。DayPlan致力于在提醒用户的同时不过分打扰用户。
分享功能
DayPlan可以从某个任务生成一个描述该任务的字符串,并分享到其他应用。
【实例截图】
【核心代码】
package cn.edu.zju.isee.www.dayplan;
import java.util.Calendar;
import java.util.Date;
import java.util.UUID;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.AlertDialog;
import android.app.PendingIntent;
import android.app.TimePickerDialog;
import android.app.TimePickerDialog.OnTimeSetListener;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.NavUtils;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;
public class PlanEditFragment extends Fragment{
public static final String EXTRA_PLAN ="cn.edu.zju.isee.www.dayplan";
public static final String EXTRA_PLAN_ID ="extra_id";
private static final String TAG ="PlanEditFragment";
private static final String DIALOG_DATE ="date";
private static final String DIALOG_TYPE ="type";
private static final int REQUEST_DATE =0;
private static final int REQUEST_PHOTO =1;
private static final int REQUEST_TIME =2;
private static final int REQUEST_TYPE =3;
private Plan mPlan;
private EditText mTitleField;
private Button mDateButton;
private Button mShareButton;
private Button mAlarmButton;
private Button mAnalyseButton;
private ImageButton mPhotoButton;
private CheckBox mSolvedCheckBox;
private ImageView mPhotoView;
private TextView mTypeTextView;
private ImageView mTypeImageView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
UUID planId=(UUID)getArguments().getSerializable(EXTRA_PLAN_ID);
mPlan=SinglePlanLab.getInstance(getActivity()).getPlan(planId);
setHasOptionsMenu(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v=inflater.inflate(R.layout.fragment_plan_edit, container,false);
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB){
if(NavUtils.getParentActivityIntent(getActivity())!=null){
getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);
}
}
mTitleField=(EditText)v.findViewById(R.id.plan_title);
mTitleField.setText(mPlan.getTitle());
mTitleField.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
mPlan.setTitle(s.toString());
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
mDateButton=(Button)v.findViewById(R.id.plan_date);
mDateButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fm=getActivity().getSupportFragmentManager();
DatePickerFragment dialog=DatePickerFragment.newInstance(mPlan.getDate());
dialog.setTargetFragment(PlanEditFragment.this,REQUEST_DATE);
dialog.show(fm,DIALOG_DATE);
}
});
updateDate();
mSolvedCheckBox=(CheckBox)v.findViewById(R.id.plan_solved);
if(mPlan.getSolved()==1){
mSolvedCheckBox.setChecked(true);
}else{
mSolvedCheckBox.setChecked(false);
}
mSolvedCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
mPlan.setSolved(1);
}else{
mPlan.setSolved(0);
}
}
});
mPhotoButton=(ImageButton)v.findViewById(R.id.plan_imageButton);
mPhotoButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i=new Intent(getActivity(),PlanCameraActivity.class);
startActivityForResult(i, REQUEST_PHOTO);
}
});
mPhotoView=(ImageView)v.findViewById(R.id.plan_imageView);
mPhotoView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i=new Intent(getActivity(),ImageActivity.class);
Photo p=mPlan.getPhoto();
if(p!=null){
String path=getActivity().getFileStreamPath(p.getFileName()).getAbsolutePath();
i.putExtra(ImageFragment.EXTRA_IMAGE_PATH, path);
startActivity(i);
}
}
});
mShareButton=(Button)v.findViewById(R.id.plan_shareButton);
mShareButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i=new Intent(Intent.ACTION_SEND);
i.setType("text/plain");
i.putExtra(EXTRA_PLAN, getText());
//
startActivity(i);
}
});
mAlarmButton=(Button)v.findViewById(R.id.plan_alarmButton);
mAlarmButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Calendar currentTime=Calendar.getInstance();
final AlarmManager alarmManager=(AlarmManager)getActivity().
getSystemService(getActivity().ALARM_SERVICE);
Intent i=new Intent(getActivity(),AlarmActivity.class);
i.putExtra(EXTRA_PLAN_ID, mPlan.getId().toString());
final PendingIntent pi=PendingIntent.getActivity(getActivity(), REQUEST_TIME, i, 0);
if(mPlan.getIsSetAlarm()==0){
new TimePickerDialog(getActivity(),
new OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
Calendar c=Calendar.getInstance();
c.setTime(mPlan.getDate());
c.set(Calendar.HOUR_OF_DAY,hourOfDay);
c.set(Calendar.MINUTE,minute);
Date d=c.getTime();
mPlan.setDate(d);
mPlan.setIsSetAlarm(1);
alarmManager.set(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(),pi);
//
Toast.makeText(getActivity(), "提醒设置完毕", Toast.LENGTH_SHORT).show();
}
}, currentTime.get(Calendar.HOUR_OF_DAY), currentTime.get(Calendar.MINUTE),
true).show();
mAlarmButton.setText("取消提醒");
mPlan.setIsSetAlarm(1);
}else{
alarmManager.cancel(pi);
Toast.makeText(getActivity(), "提醒已取消", Toast.LENGTH_SHORT).show();
mAlarmButton.setText("提醒我");
mPlan.setIsSetAlarm(0);
}
}
});
mTypeTextView=(TextView)v.findViewById(R.id.plan_typeTextView);
mTypeImageView=(ImageView)v.findViewById(R.id.plan_typeImageView);
updateType();
mTypeTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fm=getActivity().getSupportFragmentManager();
TypeSelectFragment dialog=TypeSelectFragment.newInstance(mPlan.getType());
dialog.setTargetFragment(PlanEditFragment.this,REQUEST_TYPE);
dialog.show(fm,DIALOG_TYPE);
}
});
return v;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode!=Activity.RESULT_OK){
return;
}
if(requestCode==REQUEST_DATE){
Date date=(Date)data.getSerializableExtra(DatePickerFragment.EXTRA_DATE);
mPlan.setDate(date);
updateDate();
}else if(requestCode==REQUEST_PHOTO){
String fileName=data.getStringExtra(PlanCameraFragment.EXTRA_PHOTO_NAME);
if(fileName!=null){
Photo photo=new Photo(fileName);
mPlan.setPhoto(photo);
showPhoto();
Log.d(TAG,"plan:" mPlan.getTitle() " has a photo");
}
}else if(requestCode==REQUEST_TYPE){
String type=(String)data.getSerializableExtra(TypeSelectFragment.EXTRA_TYPE);
mPlan.setType(type);
//.........
updateType();
}
super.onActivityResult(requestCode, resultCode, data);
}
public static PlanEditFragment newInstance(UUID planId){
Bundle args=new Bundle();
args.putSerializable(EXTRA_PLAN_ID, planId);
PlanEditFragment fragment=new PlanEditFragment();
fragment.setArguments(args);
return fragment;
}
public void updateDate(){
mDateButton.setText("" mPlan.getYear() "-" mPlan.getMonth() "-" mPlan.getDay());
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){
case android.R.id.home:
if(NavUtils.getParentActivityIntent(getActivity())!=null){
NavUtils.navigateUpFromSameTask(getActivity());
}
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onStart() {
super.onStart();
showPhoto();
}
@Override
public void onStop() {
super.onStop();
ImageUtils.cleanImageView(mPhotoView);
}
@Override
public void onPause() {
super.onPause();
SinglePlanLab.getInstance(getActivity()).savePlans();
}
private void showPhoto(){
Photo p=mPlan.getPhoto();
Bitmap b=null;
if(p!=null){
String path=getActivity().getFileStreamPath(p.getFileName()).getAbsolutePath();
b=ImageUtils.decodeSampledBitmapFromFile(path, 240, 240);
}
mPhotoView.setImageBitmap(b);
}
private void updateType(){
if(mPlan.getType().equals("重要且紧迫")){
mTypeTextView.setText(" 重要且紧迫");
mTypeImageView.setBackgroundResource(android.R.color.holo_green_light);
}else if(mPlan.getType().equals("重要不紧迫")){
mTypeTextView.setText(" 重要不紧迫");
mTypeImageView.setBackgroundResource(android.R.color.holo_blue_bright);
}else if(mPlan.getType().equals("紧迫不重要")){
mTypeTextView.setText(" 紧迫不重要");
mTypeImageView.setBackgroundResource(android.R.color.holo_purple);
}else if(mPlan.getType().equals("不重要不紧迫")){
mTypeTextView.setText(" 不重要不紧迫");
mTypeImageView.setBackgroundResource(android.R.color.holo_orange_light);
}else{
mTypeTextView.setText(" 未分类");
mTypeImageView.setBackgroundResource(android.R.color.darker_gray);
}
}
private String getText(){
return new String(mPlan.getMonth() "-" mPlan.getDay() " \n" mPlan.getTitle()
"\n 任务类型" mPlan.getType());
}
}
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论