安卓课设高颜值记事本

项目介绍

动画加载

导入依赖

implementation'com.airbnb.android:lottie:3.4.1'

注册登录功能

ViewPager实现注册登录功能(开源)

滑动和点击实现注册登录界面的切换,用两个fragment,实现注册登录片段,通过SharedPreferences实现注册数据的保存,和登录密码的验证,以LoginActivity为载体,用getActivity()获得当前的Activity。

在SignupFragment中使用editor保存用户注册的数据,在LoginTabFragment中用getUserinfo方法获得SharedPreferences存储的数据。

主界面功能实现

历史记录展示,recyclerview的适配器中,onCreateViewHolder用于加载相应视图,onBindViewHolder用于得到相关数据,以及对记事点击的监听,处理每一个item的点击事件,即记事的修改功能,MyViewHolder类用于装载一个记录。

用轻量级数据库SQLite,新建一个表,在CRUD文件中实现数据的增删改查,相关数据库操作,用mode关键词区分用户是需要修改还是新增一个记事,

startActivityForResult方法,用于得到用户输入的信息,在编辑已有记录的时候,需传入一个id值,用于在数据库中找到该条记录,对数据进行修改。

删除所有记录按钮,弹出一个确认删除窗口,若确认则删除所有记录。

OnActivityResult,处理Activity传回来的相关数据

主页面后端处理逻辑:

package com.example.myapplication6;
​
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager.widget.ViewPager;
​
import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
​
import com.google.android.material.floatingactionbutton.FloatingActionButton;
​
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
​
public class MainActivity extends AppCompatActivity {
​
    FloatingActionButton btn;
    private ViewPager viewPager;
    Button clo;
    Button user;
    FloatingActionButton dtn;
    private NoteDatabase dbHelper;
    private Context context=this;
    private recycleAdapter adapter;
    private RecyclerView rv;
​
    private List<Note> noteList=new ArrayList<>();
    @SuppressLint("MissingInflatedId")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn=findViewById(R.id.fab);
        rv=findViewById(R.id.rv_1);
        dtn=findViewById(R.id.delete);
        clo=findViewById(R.id.cloth);
        user=findViewById(R.id.sitimg);
​
        adapter=new recycleAdapter(MainActivity.this,noteList);
​
        rv.setAdapter(adapter);
        refreshrecycleView();
​
        rv.setLayoutManager(new LinearLayoutManager(MainActivity.this,LinearLayoutManager.VERTICAL,false));
        //添加记录
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MainActivity.this,EditActivity.class);
                intent.putExtra("mode",4);
                startActivityForResult(intent,0);
            }
        });
​
        //生活指标展示
        clo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MainActivity.this, WebvisitActivity.class);
                startActivity(intent);
            }
        });
​
        //个人中心
        user.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MainActivity.this, User.class);
                startActivity(intent);
            }
        });
​
        //删除所有记录
        dtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
​
                /*将确认界面加载到对话框中*/
                View viewLogin = LayoutInflater.from(MainActivity.this).inflate(R.layout.layout_dialog, null);
                AlertDialog.Builder builderLogin = new AlertDialog.Builder(MainActivity.this);
                builderLogin.setView(viewLogin);
​
                /*为确认删除对话框设置相关属性*/
                builderLogin.setMessage("")
                        .setCancelable(false)
                        .setPositiveButton("确定",null)
                        .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialogInterface, int i) {
                                dialogInterface.dismiss();
                            }
                        });
                /*使用AlertDialog.Builder的create( )方法来创建AlertDialog实例,并显示该对话框*/
                AlertDialog alertDialog = builderLogin.create();
                alertDialog.show();
​
                alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        CRUD op=new CRUD(context);
                        op.open();
                        op.Deleteall();
                        op.close();
                        refreshrecycleView();
                        alertDialog.dismiss();
                    }
                });
            }
        });
    }
​
    //接收startActivityForResult的结果
    protected void onActivityResult(int requestCode,int resultCode,Intent data) {
​
        int returnMode;
        long note_Id;
        returnMode=data.getExtras().getInt("mode",-1);
        note_Id=data.getExtras().getLong("id",0);
        int tag=data.getExtras().getInt("tag",1);
        //修改笔记
        if(returnMode==1){
            String content=data.getStringExtra("content");
            String time=data.getStringExtra("time");
            Note note=new Note(content,time,tag);
            note.setId(note_Id);
            CRUD op=new CRUD(context);
            op.open();
            op.updateNote(note);
            op.close();
        }
        //新建笔记
        else if(requestCode==0){
            String content=data.getStringExtra("content");
            String time=data.getStringExtra("time");
            Note note=new Note(content,time,tag);
            CRUD op=new CRUD(context);
            op.open();
            op.addNote(note);
            op.close();
        }
        //其他情况不做处理
        else{}
        refreshrecycleView();
        super.onActivityResult(requestCode, resultCode, data);
    }
    //刷新一次
    public void refreshrecycleView(){
        CRUD op=new CRUD(context);
        op.open();
        if (noteList.size()>0) {
            noteList.clear();
        }
        noteList.addAll(op.getAllNote());
        op.close();
        adapter.notifyDataSetChanged();
    }
}

笔记编辑页面后端逻辑:

package com.example.myapplication6;
​
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
​
import androidx.appcompat.app.AppCompatActivity;
​
import java.text.SimpleDateFormat;
import java.util.Date;
​
public class EditActivity extends AppCompatActivity {
​
    EditText editText;
    private Button bt;
    private String old_content="";
    private String old_time="";
    private int old_Tag=1;
    private long id=0;
    private int openMode=0;
​
    public Intent intent=new Intent();
​
​
    @SuppressLint("MissingInflatedId")
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.edit_layout);
​
        editText=findViewById(R.id.edit);
        bt=findViewById(R.id.button);
​
        //点击每条记录拿到内容显示编辑界面
        Intent getIntent=getIntent();
        int openMode=getIntent.getIntExtra("mode",0);
        id=getIntent.getLongExtra("id",0);
        //点击的是一个已经写好的笔记
        if(openMode==3){
            old_content = getIntent.getStringExtra("content");
            old_time=getIntent.getStringExtra("time");
            old_Tag=getIntent.getIntExtra("tag",1);
            editText.setText(old_content);
            //设置光标的位置,在文本最后
            editText.setSelection(old_content.length());
        }
​
        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                autoSetMessage();
                setResult(RESULT_OK,intent);
                //结束该进程活动
                finish();
            }
​
            public void autoSetMessage(){
                //新建一个笔记
                if(openMode==4){
                    if(editText.getText().toString().length()==0){
                        intent.putExtra("mode",-1);//没有输入内容
                    }
                    else{
                        intent.putExtra("mode",0);//新建一个笔记
                        intent.putExtra("content",editText.getText().toString());
                        intent.putExtra("time",dateToStr());
                    }
                }
                //打开已有笔记
                else{
                    if(editText.getText().toString().equals(old_content)){
                        intent.putExtra("mode",-1);//没有改变笔记内容
                    }
                    else{
                        intent.putExtra("mode",1);//修改笔记内容
                        intent.putExtra("content",editText.getText().toString());
                        intent.putExtra("time",dateToStr());
                        intent.putExtra("id",id);
                    }
​
                }
            }
        });
    }
    //将时间记录转变成想要的格式
    public String dateToStr(){
        Date date =new Date();
        SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd     HH:mm:ss");
        return simpleDateFormat.format(date);
    }
}

网络访问实现

通过webview设置网页显示的位置,在webActivity中定义WebSettings,加载网页链接,返回网页数据.

网络访问后端逻辑:

package com.example.myapplication6;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;

import androidx.appcompat.app.AppCompatActivity;

public class WebvisitActivity extends AppCompatActivity {

    Button bt;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.webview);
        bt=findViewById(R.id.back);
        WebView web=findViewById(R.id.web);

        /*开启DOM存储API权限,并允许执行JS*/
        WebSettings webSettings=web.getSettings();
        webSettings.setDomStorageEnabled(true);
        webSettings.setJavaScriptEnabled(true);

        /*打开网页时不调用系统浏览器,而是在本WebView中显示*/
        web.setWebViewClient(new WebViewClient());
        web.loadUrl("https://m.baidu.com/sf?county_id=101250101&dspName=iphone&ext=%7B%22bar_sort%22%3A%22chuanyi%2Cchuyou%2Cxiche%2Cganmao%2C%22%2C%22sf_tab_name%22%3A%22chuanyi%22%7D&from_sf=1&fromapp=vsgo&openapi=1&pd=life_compare_weather&resource_id=4599&title=%E7%94%9F%E6%B4%BB%E6%B0%94%E8%B1%A1%E6%8C%87%E6%95%B0&word=%E9%95%BF%E6%B2%99&fromSite=pc");//加载网页

        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent();
                finish();
            }
        });

    }
}

项目目前还有很多有待完善的地方,如将用户注册登录的数据用SQLite存储会更加合理,即用户不需要返回应用加载页面,且用户可以用多个账户登录

在功能方面也还有待完善的地方,如单个记事的删除等。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值