当前位置:   article > 正文

安卓课设高颜值记事本

安卓课设高颜值记事本

项目介绍

动画加载

导入依赖

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传回来的相关数据

主页面后端处理逻辑:

  1. package com.example.myapplication6;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import androidx.recyclerview.widget.LinearLayoutManager;
  4. import androidx.recyclerview.widget.RecyclerView;
  5. import androidx.viewpager.widget.ViewPager;
  6. import android.annotation.SuppressLint;
  7. import android.app.AlertDialog;
  8. import android.content.Context;
  9. import android.content.DialogInterface;
  10. import android.content.Intent;
  11. import android.os.Bundle;
  12. import android.view.LayoutInflater;
  13. import android.view.View;
  14. import android.widget.Button;
  15. import com.google.android.material.floatingactionbutton.FloatingActionButton;
  16. import java.net.URL;
  17. import java.util.ArrayList;
  18. import java.util.List;
  19. public class MainActivity extends AppCompatActivity {
  20.    FloatingActionButton btn;
  21.    private ViewPager viewPager;
  22.    Button clo;
  23.    Button user;
  24.    FloatingActionButton dtn;
  25.    private NoteDatabase dbHelper;
  26.    private Context context=this;
  27.    private recycleAdapter adapter;
  28.    private RecyclerView rv;
  29.    private List<Note> noteList=new ArrayList<>();
  30.    @SuppressLint("MissingInflatedId")
  31.    @Override
  32.    protected void onCreate(Bundle savedInstanceState) {
  33.        super.onCreate(savedInstanceState);
  34.        setContentView(R.layout.activity_main);
  35.        btn=findViewById(R.id.fab);
  36.        rv=findViewById(R.id.rv_1);
  37.        dtn=findViewById(R.id.delete);
  38.        clo=findViewById(R.id.cloth);
  39.        user=findViewById(R.id.sitimg);
  40.        adapter=new recycleAdapter(MainActivity.this,noteList);
  41.        rv.setAdapter(adapter);
  42.        refreshrecycleView();
  43.        rv.setLayoutManager(new LinearLayoutManager(MainActivity.this,LinearLayoutManager.VERTICAL,false));
  44.        //添加记录
  45.        btn.setOnClickListener(new View.OnClickListener() {
  46.            @Override
  47.            public void onClick(View view) {
  48.                Intent intent=new Intent(MainActivity.this,EditActivity.class);
  49.                intent.putExtra("mode",4);
  50.                startActivityForResult(intent,0);
  51.           }
  52.       });
  53.        //生活指标展示
  54.        clo.setOnClickListener(new View.OnClickListener() {
  55.            @Override
  56.            public void onClick(View view) {
  57.                Intent intent=new Intent(MainActivity.this, WebvisitActivity.class);
  58.                startActivity(intent);
  59.           }
  60.       });
  61.        //个人中心
  62.        user.setOnClickListener(new View.OnClickListener() {
  63.            @Override
  64.            public void onClick(View view) {
  65.                Intent intent=new Intent(MainActivity.this, User.class);
  66.                startActivity(intent);
  67.           }
  68.       });
  69.        //删除所有记录
  70.        dtn.setOnClickListener(new View.OnClickListener() {
  71.            @Override
  72.            public void onClick(View view) {
  73.                /*将确认界面加载到对话框中*/
  74.                View viewLogin = LayoutInflater.from(MainActivity.this).inflate(R.layout.layout_dialog, null);
  75.                AlertDialog.Builder builderLogin = new AlertDialog.Builder(MainActivity.this);
  76.                builderLogin.setView(viewLogin);
  77.                /*为确认删除对话框设置相关属性*/
  78.                builderLogin.setMessage("")
  79.                       .setCancelable(false)
  80.                       .setPositiveButton("确定",null)
  81.                       .setNegativeButton("取消", new DialogInterface.OnClickListener() {
  82.                            @Override
  83.                            public void onClick(DialogInterface dialogInterface, int i) {
  84.                                dialogInterface.dismiss();
  85.                           }
  86.                       });
  87.                /*使用AlertDialog.Builder的create( )方法来创建AlertDialog实例,并显示该对话框*/
  88.                AlertDialog alertDialog = builderLogin.create();
  89.                alertDialog.show();
  90.                alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
  91.                    @Override
  92.                    public void onClick(View view) {
  93.                        CRUD op=new CRUD(context);
  94.                        op.open();
  95.                        op.Deleteall();
  96.                        op.close();
  97.                        refreshrecycleView();
  98.                        alertDialog.dismiss();
  99.                   }
  100.               });
  101.           }
  102.       });
  103.   }
  104.    //接收startActivityForResult的结果
  105.    protected void onActivityResult(int requestCode,int resultCode,Intent data) {
  106.        int returnMode;
  107.        long note_Id;
  108.        returnMode=data.getExtras().getInt("mode",-1);
  109.        note_Id=data.getExtras().getLong("id",0);
  110.        int tag=data.getExtras().getInt("tag",1);
  111.        //修改笔记
  112.        if(returnMode==1){
  113.            String content=data.getStringExtra("content");
  114.            String time=data.getStringExtra("time");
  115.            Note note=new Note(content,time,tag);
  116.            note.setId(note_Id);
  117.            CRUD op=new CRUD(context);
  118.            op.open();
  119.            op.updateNote(note);
  120.            op.close();
  121.       }
  122.        //新建笔记
  123.        else if(requestCode==0){
  124.            String content=data.getStringExtra("content");
  125.            String time=data.getStringExtra("time");
  126.            Note note=new Note(content,time,tag);
  127.            CRUD op=new CRUD(context);
  128.            op.open();
  129.            op.addNote(note);
  130.            op.close();
  131.       }
  132.        //其他情况不做处理
  133.        else{}
  134.        refreshrecycleView();
  135.        super.onActivityResult(requestCode, resultCode, data);
  136.   }
  137.    //刷新一次
  138.    public void refreshrecycleView(){
  139.        CRUD op=new CRUD(context);
  140.        op.open();
  141.        if (noteList.size()>0) {
  142.            noteList.clear();
  143.       }
  144.        noteList.addAll(op.getAllNote());
  145.        op.close();
  146.        adapter.notifyDataSetChanged();
  147.   }
  148. }

笔记编辑页面后端逻辑:

  1. package com.example.myapplication6;
  2. import android.annotation.SuppressLint;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.widget.Button;
  7. import android.widget.EditText;
  8. import android.widget.Toast;
  9. import androidx.appcompat.app.AppCompatActivity;
  10. import java.text.SimpleDateFormat;
  11. import java.util.Date;
  12. public class EditActivity extends AppCompatActivity {
  13.    EditText editText;
  14.    private Button bt;
  15.    private String old_content="";
  16.    private String old_time="";
  17.    private int old_Tag=1;
  18.    private long id=0;
  19.    private int openMode=0;
  20.    public Intent intent=new Intent();
  21.    @SuppressLint("MissingInflatedId")
  22.    protected void onCreate(Bundle savedInstanceState) {
  23.        super.onCreate(savedInstanceState);
  24.        setContentView(R.layout.edit_layout);
  25.        editText=findViewById(R.id.edit);
  26.        bt=findViewById(R.id.button);
  27.        //点击每条记录拿到内容显示编辑界面
  28.        Intent getIntent=getIntent();
  29.        int openMode=getIntent.getIntExtra("mode",0);
  30.        id=getIntent.getLongExtra("id",0);
  31.        //点击的是一个已经写好的笔记
  32.        if(openMode==3){
  33.            old_content = getIntent.getStringExtra("content");
  34.            old_time=getIntent.getStringExtra("time");
  35.            old_Tag=getIntent.getIntExtra("tag",1);
  36.            editText.setText(old_content);
  37.            //设置光标的位置,在文本最后
  38.            editText.setSelection(old_content.length());
  39.       }
  40.        bt.setOnClickListener(new View.OnClickListener() {
  41.            @Override
  42.            public void onClick(View view) {
  43.                autoSetMessage();
  44.                setResult(RESULT_OK,intent);
  45.                //结束该进程活动
  46.                finish();
  47.           }
  48.            public void autoSetMessage(){
  49.                //新建一个笔记
  50.                if(openMode==4){
  51.                    if(editText.getText().toString().length()==0){
  52.                        intent.putExtra("mode",-1);//没有输入内容
  53.                   }
  54.                    else{
  55.                        intent.putExtra("mode",0);//新建一个笔记
  56.                        intent.putExtra("content",editText.getText().toString());
  57.                        intent.putExtra("time",dateToStr());
  58.                   }
  59.               }
  60.                //打开已有笔记
  61.                else{
  62.                    if(editText.getText().toString().equals(old_content)){
  63.                        intent.putExtra("mode",-1);//没有改变笔记内容
  64.                   }
  65.                    else{
  66.                        intent.putExtra("mode",1);//修改笔记内容
  67.                        intent.putExtra("content",editText.getText().toString());
  68.                        intent.putExtra("time",dateToStr());
  69.                        intent.putExtra("id",id);
  70.                   }
  71.               }
  72.           }
  73.       });
  74.   }
  75.    //将时间记录转变成想要的格式
  76.    public String dateToStr(){
  77.        Date date =new Date();
  78.        SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd     HH:mm:ss");
  79.        return simpleDateFormat.format(date);
  80.   }
  81. }

网络访问实现

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

网络访问后端逻辑:

  1. package com.example.myapplication6;
  2. import android.content.Intent;
  3. import android.os.Bundle;
  4. import android.view.View;
  5. import android.webkit.WebSettings;
  6. import android.webkit.WebView;
  7. import android.webkit.WebViewClient;
  8. import android.widget.Button;
  9. import androidx.appcompat.app.AppCompatActivity;
  10. public class WebvisitActivity extends AppCompatActivity {
  11.     Button bt;
  12.     protected void onCreate(Bundle savedInstanceState) {
  13.         super.onCreate(savedInstanceState);
  14.         setContentView(R.layout.webview);
  15.         bt=findViewById(R.id.back);
  16.         WebView web=findViewById(R.id.web);
  17.         /*开启DOM存储API权限,并允许执行JS*/
  18.         WebSettings webSettings=web.getSettings();
  19.         webSettings.setDomStorageEnabled(true);
  20.         webSettings.setJavaScriptEnabled(true);
  21.         /*打开网页时不调用系统浏览器,而是在本WebView中显示*/
  22.         web.setWebViewClient(new WebViewClient());
  23.         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");//加载网页
  24.         bt.setOnClickListener(new View.OnClickListener() {
  25.             @Override
  26.             public void onClick(View view) {
  27.                 Intent intent=new Intent();
  28.                 finish();
  29.             }
  30.         });
  31.     }
  32. }

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/586830
推荐阅读
相关标签
  

闽ICP备14008679号