安卓Andriod使用入门(二十六)【记事本】

一个伟大的人有两颗心:一颗心流血;另一颗心宽容。


MainActivity.java代码:

package siso.smartnotef.activity;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

import siso.smartnotef.R;
import siso.smartnotef.adapter.NotepadeAdapter;
import siso.smartnotef.db.DataHelper;
import siso.smartnotef.global.GlobalParams;
import siso.smartnotef.model.NotepadBean;
import siso.smartnotef.model.NotepadWithDataBean;
import siso.smartnotef.service.MainService;

public class MainActivity extends AppCompatActivity implements View.OnClickListener, NotepadeAdapter.ClickFunction {

    private TextView tv_add;
    private ListView lv_contents;
    private List<NotepadWithDataBean> notepadWithDataBeanList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Intent intent1 = new Intent(MainActivity.this, MainService.class);
        startService(intent1);
        findViews();
        setListeners();
        initView();

    }

    private void findViews() {
        tv_add = (TextView) findViewById(R.id.tv_add);
        lv_contents = (ListView) findViewById(R.id.lv_content);
    }

    private void setListeners() {
        tv_add.setOnClickListener(this);
    }

    private void initView() {
        DataHelper helper = new DataHelper(MainActivity.this);
        notepadWithDataBeanList = new ArrayList<NotepadWithDataBean>();
        List<NotepadBean> notepadBeanList = helper.getNotepadList();
        for (int i = 0; i < notepadBeanList.size(); i++) {
            if (0 == notepadWithDataBeanList.size()) {
                NotepadWithDataBean notepadWithDataBean = new NotepadWithDataBean();
                notepadWithDataBean.setData(notepadBeanList.get(0).getDate());
                notepadWithDataBeanList.add(notepadWithDataBean);
            }
            boolean flag = true;
            for (int j = 0; j < notepadWithDataBeanList.size(); j++) {
                int date = notepadWithDataBeanList.get(j).getData();
                if (date == notepadBeanList.get(i).getDate()) {
                    notepadWithDataBeanList.get(j).getNotepadBeenList().add(notepadBeanList.get(i));
                    flag = false;
                    break;
                }
            }
            if (flag) {
                NotepadWithDataBean notepadWithDataBean = new NotepadWithDataBean();
                notepadWithDataBean.setData(notepadBeanList.get(i).getDate());
                notepadWithDataBeanList.add(notepadWithDataBean);
                notepadWithDataBeanList.get(notepadWithDataBeanList.size() - 1).getNotepadBeenList().add(notepadBeanList.get(i));
            }
        }
        NotepadeAdapter adapter = new NotepadeAdapter(MainActivity.this, notepadWithDataBeanList, this);
        lv_contents.setAdapter(adapter);
//        setListViewHeightBasedOnChildren(lv_contents);
    }

    public void setListViewHeightBasedOnChildren(ListView listView) {
        if (listView == null) return;
        ListAdapter listAdapter = listView.getAdapter();
        if (listAdapter == null) {
            // pre-condition
            return;
        }
        int totalHeight = 0;
        for (int i = 0; i < listAdapter.getCount(); i++) {
            View listItem = listAdapter.getView(i, null, listView);
            listItem.measure(0, 0);
            totalHeight += listItem.getMeasuredHeight();
        }
        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
        listView.setLayoutParams(params);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.tv_add:
                Intent intent = new Intent();
                Bundle bundle = new Bundle();
                bundle.putInt(GlobalParams.TYPE_KEY, GlobalParams.TYPE_ADD);
                intent.putExtras(bundle);
                intent.setClass(MainActivity.this, AddContentActivity.class);
                startActivityForResult(intent, GlobalParams.ADD_REQUEST);
                break;
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
            case GlobalParams.ADD_REQUEST:
                if (GlobalParams.ADD_RESULT_OK == resultCode) {
                    initView();
                }
                break;
        }
    }

    @Override
    public void clickItem(int position, int itemPosition) {
        Bundle bundle = new Bundle();
        bundle.putInt(GlobalParams.TYPE_KEY, GlobalParams.TYPE_EDIT);
        bundle.putSerializable(GlobalParams.BEAN_KEY, notepadWithDataBeanList.get(position));
        bundle.putInt(GlobalParams.ITEM_POSITION_KEY, itemPosition);
        Intent intent = new Intent(this, AddContentActivity.class);
        intent.putExtras(bundle);
        startActivityForResult(intent, GlobalParams.ADD_REQUEST);
    }

    @Override
    public void longClickItem(final int position, final int itemPostion) {
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        builder.setMessage("确认删除吗?");
        builder.setTitle("提示");
        builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                DataHelper helper = new DataHelper(MainActivity.this);
                helper.deleteNotepad(notepadWithDataBeanList.get(position).getNotepadBeenList().get(itemPostion).getId());
                initView();
            }
        });
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });
        builder.create().show();
    }
}

AddContentActivity.java代码:

package siso.smartnotef.activity;

import android.app.DatePickerDialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;

import java.util.Calendar;

import siso.smartnotef.R;
import siso.smartnotef.db.DataHelper;
import siso.smartnotef.global.GlobalParams;
import siso.smartnotef.model.NotepadBean;
import siso.smartnotef.model.NotepadWithDataBean;

public class AddContentActivity extends AppCompatActivity implements View.OnClickListener {

    private TextView tv_save;
    private TextView tv_date;
    private TextView tv_time;
    private TextView tv_cancel;
    private EditText et_content;
    private String time = "";
    private String date = "";
    private Bundle bundle;
    private int type;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_content);
        bundle=getIntent().getExtras();
        type=bundle.getInt(GlobalParams.TYPE_KEY);
        findViews();
        setListeners();
        initDate();
    }

    private void findViews() {
        et_content=(EditText)findViewById(R.id.et_content);
        tv_save = (TextView) findViewById(R.id.tv_save);
        tv_date = (TextView) findViewById(R.id.tv_date);
        tv_time = (TextView) findViewById(R.id.tv_time);
        tv_cancel=(TextView)findViewById(R.id.tv_cancel);
    }

    private void setListeners() {
        tv_save.setOnClickListener(this);
        tv_date.setOnClickListener(this);
        tv_time.setOnClickListener(this);
        tv_cancel.setOnClickListener(this);
    }

    private void initDate() {
        Calendar c = Calendar.getInstance();
        int year=c.get(Calendar.YEAR);
        int month=c.get(Calendar.MONTH);
        int day=c.get(Calendar.DAY_OF_MONTH);
        date=getDate(year,month,day);
        if(type==GlobalParams.TYPE_EDIT){
            NotepadWithDataBean notepadWithDataBean=(NotepadWithDataBean)(bundle.getSerializable(GlobalParams.BEAN_KEY));
            et_content.setText(notepadWithDataBean.getNotepadBeenList().get(bundle.getInt(GlobalParams.ITEM_POSITION_KEY)).getContent());
            date=notepadWithDataBean.getData()+"";
            tv_date.setText(date);
            time=notepadWithDataBean.getNotepadBeenList().get(bundle.getInt(GlobalParams.ITEM_POSITION_KEY)).getTime();
            tv_time.setText(time);
        }
    }

    private String  getDate(int year,int month,int day){
        String date="";
        date+=year;
        if(month<9){
            date=date+"0"+(month+1);
        }else{
            date+=(month+1);
        }
        if(day<10){
            date=date+"0"+day;
        }else {
            date+=day;
        }
        return date;
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.tv_save:
                if(type==GlobalParams.TYPE_EDIT){
                    update();
                }else {
                    save();
                }
                break;
            case R.id.tv_date:
                selectDateDialog();
                break;
            case R.id.tv_time:
                selectTimeDialog();
                break;
            case R.id.tv_cancel:
                finish();
                break;
        }
    }
    private void selectDateDialog(){
        Calendar c = Calendar.getInstance();
        int year=c.get(Calendar.YEAR);
        final int month=c.get(Calendar.MONTH)+1;
        int day=c.get(Calendar.DAY_OF_MONTH);
        new DatePickerDialog(AddContentActivity.this, new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                date=getDate(year,monthOfYear,dayOfMonth);
                tv_date.setText(date);
            }
        },year,month,day).show();
    }

    private void selectTimeDialog() {
        Calendar c = Calendar.getInstance();
        int mHour = c.get(Calendar.HOUR_OF_DAY);
        int mMinute = c.get(Calendar.MINUTE);
        new TimePickerDialog(AddContentActivity.this,
                new TimePickerDialog.OnTimeSetListener() {

                    @Override
                    public void onTimeSet(TimePicker view,
                                          int hourOfDay, int minute) {
                        time=formatTime(hourOfDay,minute);
                        tv_time.setText(time);
                    }
                }, mHour, mMinute, true).show();
    }

    private String formatTime(int hour,int minute){
        String time=hour+":";
        if(minute<10){
            time=time+"0"+minute;
        }else{
            time+=minute;
        }
        return time;
    }
    private void save() {
        String content = et_content.getText().toString();
        if ("".equals(content)) {
            Toast.makeText(AddContentActivity.this, "请输入内容", Toast.LENGTH_SHORT).show();
            return;
        }
        if ("".equals(time)) {
            Toast.makeText(AddContentActivity.this, "请选择时间", Toast.LENGTH_SHORT).show();
            return;
        }
        NotepadBean notepadBean = new NotepadBean();
        notepadBean.setContent(content);
        notepadBean.setDate(Integer.parseInt(date));
        notepadBean.setTime(time);
        DataHelper helper = new DataHelper(AddContentActivity.this);
        helper.insertData(notepadBean);
        setResult(GlobalParams.ADD_RESULT_OK);
        finish();
    }
    private void update(){
        DataHelper helper=new DataHelper(AddContentActivity.this);
        NotepadWithDataBean bean=(NotepadWithDataBean)(bundle.getSerializable(GlobalParams.BEAN_KEY));
        int itemPosition=bundle.getInt(GlobalParams.ITEM_POSITION_KEY);
        helper.update(bean.getNotepadBeenList().get(itemPosition).getId(),date,time,et_content.getText().toString());
        setResult(GlobalParams.ADD_RESULT_OK);
        finish();
    }
}

RemindActivity.java代码:

package siso.smartnotef.activity;

import android.media.MediaPlayer;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.io.IOException;

import siso.smartnotef.R;
import siso.smartnotef.global.GlobalParams;

public class RemindActivity extends AppCompatActivity {

    private TextView tv_content;
    private Button bt_confirm;
    private MediaPlayer mMediaPlayer;;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_remind);
        findViews();
        setListeners();
        Bundle bundle=getIntent().getExtras();
        String content=bundle.getString(GlobalParams.CONTENT_KEY);
        tv_content.setText(content);
        playSound();
    }

    private void findViews(){
        tv_content=(TextView)findViewById(R.id.tv_content);
        bt_confirm=(Button) findViewById(R.id.bt_confirm);
    }
    private void setListeners(){
        bt_confirm.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
              if(null!=mMediaPlayer){
                  mMediaPlayer.stop();
                  finish();
              }
            }
        });
    }

    public void playSound() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                mMediaPlayer = MediaPlayer.create(RemindActivity.this, getSystemDefultRingtoneUri());
                mMediaPlayer.setLooping(true);//设置循环
                try {
                    mMediaPlayer.prepare();
                } catch (IllegalStateException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                mMediaPlayer.start();
            }
        }).start();

    }
    //获取系统默认铃声的Uri
    private Uri getSystemDefultRingtoneUri() {
        return RingtoneManager.getActualDefaultRingtoneUri(RemindActivity.this,
                RingtoneManager.TYPE_RINGTONE);
    }

}

activity_main.xml内容:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="siso.smartnotef.activity.MainActivity">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="@color/title_color"
        android:paddingLeft="10dp"
        android:paddingRight="10dp">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/white"
            android:textSize="18sp"
            android:layout_centerInParent="true"
            android:text="智能记事本"/>
        <TextView
            android:id="@+id/tv_add"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/white"
            android:text="新增"
            android:layout_centerVertical="true"
            android:layout_alignParentRight="true"
            android:textSize="13sp"/>
    </RelativeLayout>
    <ListView
        android:id="@+id/lv_content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"></ListView>
</LinearLayout>

activity_add_content.xml内容:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_add_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="siso.smartnotef.activity.AddContentActivity">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="@color/title_color"
        android:paddingLeft="10dp"
        android:paddingRight="10dp">
        <TextView
            android:id="@+id/tv_cancel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:text="取消"
            android:textColor="@color/white"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/white"
            android:textSize="18sp"
            android:layout_centerInParent="true"
            android:text="智能记事本"/>
        <TextView
            android:id="@+id/tv_save"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/white"
            android:text="保存"
            android:layout_centerVertical="true"
            android:layout_alignParentRight="true"
            />
    </RelativeLayout>
    <LinearLayout
        android:layout_marginTop="10dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_gravity="center_horizontal">
        <TextView
            android:id="@+id/tv_date"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="5dp"
            android:text="今天"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=" -- "/>
        <TextView
            android:id="@+id/tv_time"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="5dp"
            android:text="请选择时间"
            />
    </LinearLayout>
    <EditText
        android:id="@+id/et_content"
        android:layout_marginTop="10dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:inputType="textMultiLine"
        android:gravity="left|top"
        android:layout_margin="20dp"
        android:padding="10dp"
        android:hint="请输入内容"
        android:background="@drawable/edit_back"/>
</LinearLayout>

activity_remind.xml内容:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    android:orientation="vertical"
    tools:context="siso.smartnotef.activity.RemindActivity">

    <TextView
        android:id="@+id/tv_content"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal" />

    <Button
        android:id="@+id/bt_confirm"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="取消" />
</LinearLayout>

AndroidManifest.xml内容:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="siso.smartnotef">
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/Theme.AppCompat.Light.NoActionBar">

        <activity
            android:name=".activity.MainActivity"
            android:theme="@style/Theme.AppCompat.Light.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver android:name=".receiver.MainReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

        <activity android:name=".activity.AddContentActivity" />

        <service
            android:name=".service.MainService"
            android:enabled="true"
            android:exported="true" />

        <activity android:name=".activity.RemindActivity"
            ></activity>


    </application>

</manifest>

项目结构如图:

这里写图片描述


项目运行结果如图:

这里写图片描述


这里写图片描述


这里写图片描述


这里写图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值