网络资源模板--基于 Android Studio 实现简易的记事本

目录

一、项目测试视频

二、项目简介

三、项目测试环境

四、项目详情设计

Get 项目模板源码


一、项目测试视频

网络资源模板--基于Android Studio 记事本

二、项目简介

电子便签,使用移动数据库sqlite类,实现简单的数据增加、删除、修改、查询(通过标题为引索条件)
程序结构由MainActivity、AddActivity、EdiActivity、NoteDbOpenHelper、工具包util(内含自定义Toast类)、bean包、adapter包(适配器类)组成

三、项目测试环境

10c1df080775455d8425e63a8c46fe36.png

四、项目详情设计

b6756d91b52b487e8adc1480feb35f5e.png

这个代码是一个简单的 Android 应用程序,用于添加笔记。它包含一个 `AddActivity` 类,用于在用户输入标题和内容后将笔记保存到数据库中。以下是代码的主要功能:

1. 导入必要的类和库。
2. 在 `AddActivity` 类中,初始化界面元素和数据库助手对象。
3. 在 `onCreate` 方法中,设置布局和获取 EditText 对象以及数据库助手对象。
4. `add` 方法用于处理用户点击添加按钮的事件。它首先从 EditText 中获取标题和内容,然后检查标题是否为空。如果为空,显示相应的提示消息。然后创建一个 `Note` 对象,并设置标题、内容和创建时间。接下来,调用数据库助手的 `insertData` 方法将笔记插入数据库中。根据插入操作的结果显示相应的提示消息,并根据成功与否决定是否关闭当前活动。
5. `getCurrentTimeFormat` 方法用于获取当前时间,并以指定的格式返回时间字符串。

总的来说,这段代码实现了一个简单的添加笔记功能,用户可以输入标题和内容,然后将其保存到数据库中。

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".AddActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="10dp">


        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <TextView
                style="@style/MyTextStyle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="标题" />

            <EditText
                android:id="@+id/et_title"
                style="@style/MyEditStyle"
                android:maxLines="1"
                android:layout_width="match_parent"
                android:layout_marginLeft="5dp" />
        </LinearLayout>

        <TextView
            style="@style/MyTextStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="内容" />

        <EditText
            android:id="@+id/et_content"
            style="@style/MyEditStyle"
            android:layout_width="match_parent"
            android:gravity="left"
            android:layout_height="300dp"
            android:layout_marginTop="5dp" />

        <Button
            style="@style/MyBtnStyle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="add"
            android:text="添加" />
    </LinearLayout>


</ScrollView>

250908ddd4634c3da2f8532b3caedcfe.png

这个MainActivity是一个笔记应用的主界面,主要功能包括:

1. 初始化界面:在onCreate()方法中初始化界面布局,初始化数据,设置事件监听器。
2. 刷新数据:在onResume()方法中从数据库刷新数据,然后根据当前的列表布局模式设置RecyclerView的布局。
3. 设置列表布局:根据用户的选择,可以切换列表的布局模式,支持线性布局和网格布局。
4. 数据操作:可以通过FloatingActionButton添加新的笔记,并且支持通过搜索功能查找笔记。
5. 数据持久化:使用SharedPreferences保存当前的列表布局模式,使用SQLite数据库进行笔记数据的增删改查操作。

这个MainActivity的代码逻辑清晰,功能完善,通过RecyclerView和Adapter实现了笔记列表的展示和管理,通过SharedPreferences保存用户偏好设置,通过SQLite数据库实现了笔记数据的持久化存储。

package com.example.noteapp281;

import android.app.SearchManager;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.SearchView;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.example.noteapp281.adapter.MyAdapter;
import com.example.noteapp281.bean.Note;
import com.example.noteapp281.util.SpfUtil;
import com.google.android.material.floatingactionbutton.FloatingActionButton;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private RecyclerView mRecyclerView;
    private FloatingActionButton mBtnAdd;
    private List<Note> mNotes;
    private MyAdapter mMyAdapter;

    private NoteDbOpenHelper mNoteDbOpenHelper;

    public static final int MODE_LINEAR = 0;
    public static final int MODE_GRID = 1;

    public static final String KEY_LAYOUT_MODE = "key_layout_mode";

    private int currentListLayoutMode = MODE_LINEAR;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initData();
        initEvent();
    }

    @Override
    protected void onResume() {
        super.onResume();
        refreshDataFromDb();
        setListLayout();
    }

    private void setListLayout() {
        currentListLayoutMode = SpfUtil.getIntWithDefault(this, KEY_LAYOUT_MODE, MODE_LINEAR);
        if (currentListLayoutMode == MODE_LINEAR) {
            setToLinearList();
        }else{
            setToGridList();
        }
    }

    private void refreshDataFromDb() {
        mNotes = getDataFromDB();
        mMyAdapter.refreshData(mNotes);
    }

    private void initEvent() {
        mMyAdapter = new MyAdapter(this, mNotes);
        mRecyclerView.setAdapter(mMyAdapter);
//        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
//        mRecyclerView.setLayoutManager(linearLayoutManager);
//        mMyAdapter.setViewType(MyAdapter.TYPE_LINEAR_LAYOUT);
        setListLayout();

    }

    private void initData() {
        mNotes = new ArrayList<>();
        mNoteDbOpenHelper = new NoteDbOpenHelper(this);
//
//        for (int i = 0; i < 30; i++) {
//            Note note = new Note();
//            note.setTitle("这是标题"+i);
//            note.setContent("这是内容"+i);
//            note.setCreatedTime(getCurrentTimeFormat());
//            mNotes.add(note);
//        }

//        mNotes = getDataFromDB();

    }

    private List<Note> getDataFromDB() {
       return mNoteDbOpenHelper.queryAllFromDb();
    }

    private String getCurrentTimeFormat() {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("YYYY年MM月dd HH:mm:ss");
        Date date = new Date();
        return simpleDateFormat.format(date);
    }

    private void initView() {
        mRecyclerView = findViewById(R.id.rlv);
    }


    public void add(View view) {
        Intent intent = new Intent(this, AddActivity.class);
        startActivity(intent);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();

        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                mNotes = mNoteDbOpenHelper.queryFromDbByTitle(newText);
                mMyAdapter.refreshData(mNotes);
                return true;
            }
        });
        return super.onCreateOptionsMenu(menu);
    }


    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        item.setChecked(true);

        switch (item.getItemId()) {

            case R.id.menu_linear:
                setToLinearList();
                currentListLayoutMode = MODE_LINEAR;
                SpfUtil.saveInt(this,KEY_LAYOUT_MODE,MODE_LINEAR);

                return true;
            case R.id.menu_grid:

                setToGridList();
                currentListLayoutMode = MODE_GRID;
                SpfUtil.saveInt(this,KEY_LAYOUT_MODE,MODE_GRID);
                return true;
            default:
                return super.onOptionsItemSelected(item);

        }
    }

    private void setToLinearList() {
        RecyclerView.LayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
        mRecyclerView.setLayoutManager(linearLayoutManager);
        mMyAdapter.setViewType(MyAdapter.TYPE_LINEAR_LAYOUT);
        mMyAdapter.notifyDataSetChanged();
    }


    private void setToGridList() {
        RecyclerView.LayoutManager gridLayoutManager = new GridLayoutManager(this, 2);
        mRecyclerView.setLayoutManager(gridLayoutManager);
        mMyAdapter.setViewType(MyAdapter.TYPE_GRID_LAYOUT);
        mMyAdapter.notifyDataSetChanged();
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        if (currentListLayoutMode == MODE_LINEAR) {
            MenuItem item = menu.findItem(R.id.menu_linear);
            item.setChecked(true);
        } else {
            menu.findItem(R.id.menu_grid).setChecked(true);
        }
        return super.onPrepareOptionsMenu(menu);
    }
}

1aa942cadf4e4219bcd7f181696dd884.png2b3aa9974fe7476fa360936e55c7f389.png

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".EditActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="10dp">


        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <TextView
                style="@style/MyTextStyle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="标题" />

            <EditText
                android:id="@+id/et_title"
                style="@style/MyEditStyle"
                android:maxLines="1"
                android:layout_width="match_parent"
                android:layout_marginLeft="5dp" />
        </LinearLayout>

        <TextView
            style="@style/MyTextStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="内容" />

        <EditText
            android:id="@+id/et_content"
            style="@style/MyEditStyle"
            android:layout_width="match_parent"
            android:gravity="left"
            android:layout_height="300dp"
            android:layout_marginTop="5dp" />

        <Button
            style="@style/MyBtnStyle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="save"
            android:text="保存" />
    </LinearLayout>


</ScrollView>

Get 项目模板源码

👇👇👇快捷获取方式👇👇👇

  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Android Studio是一款为安卓应用开发提供全套解决方案的IDE。当下,越来越多的应用程序集成了前后台分离的技术,这种技术能够充分利用网络的优势分散负载,提高资源利用率,保证用户体验同时也能提高性能,使得开发者能够更加专注功能实现和UI设计。那么如何利用Android Studio实现前后台分离的选课系统呢? 首先,在后台服务器中实现选课系统的核心功能,包括选课、退课、查看成绩等等,同时提供API供移动客户端使用。其次,在Android Studio中,应该采用MVVM架构分层,将Activity、Fragment和ViewModel分别放在不同的层次。这样,可以实现Activity、Fragment和ViewModel之间的解耦,使得代码更加清晰。 在具体实现方面,可以利用Retrofit + RxJava来实现API接口的访问和处理,它们的组合可以快速实现对后台数据的异步请求和响应处理。同时,对于UI界面的设计,可以利用Google官方的Material Design组件库,以便从美感和视觉交互层面来提高用户体验。 其次,为了保证系统的安全性,需要采用OAuth2.0协议对客户端的API请求进行授权,与此同时,后台服务器还应该采用安全认证技术,例如HTTPS来保证数据的安全性。 总之,利用Android Studio实现前后台分离的选课系统,需考虑多方面的因素,例如架构、API访问和安全性等等。如果参考上述的实现方法,开发者可以通过Android Studio轻松地实现这一目标。 ### 回答2: Android Studio是一个非常流行的开发工具,可以帮助开发者很方便地实现各种应用程序。而对于学生选课系统来说,我们可以借助Android Studio实现前后台分离的架构。 在实现前后台分离的选课系统中,我们需要通过Android Studio构建Web API服务器,让前端和后端能够通过API接口进行数据交互。在开发的过程中,我们需要设计API接口,以及后端服务,分别负责处理数据请求和响应,并将接口和服务组织成一个Web API服务器。 在前端开发中,我们使用React Native来实现UI界面和用户交互,React Native是一个流行的跨平台框架,它可以通过JavaScript语言编写UI代码,并把这些代码转化为原生代码来实现界面展示。在这种情况下,我们需要使用相关的React Native模块和工具来实现选课系统的前端部分。 最后,我们可以将前后台组合起来,让API接口能够将数据传递给前端,实现选课系统的功能。在这个过程中,我们需要注意接口和数据的安全性,同时也需要考虑系统的性能和扩展性。 总之,我们可以通过Android Studio将前后台分离的选课系统开发出来,这个过程需要我们对相关技术有一定的了解和掌握,并且需要注重代码的可维护性和性能。当然,这个选课系统只是一个简单的例子,实际上,我们可以通过Android Studio实现更加复杂和功能强大的应用程序。 ### 回答3: 在Android Studio实现前后台分离的选课系统,需要分别开发前端和后端。前端要面向用户,包括用户的课程查询、选课、退课等操作,后端则负责处理前端传递过来的数据并且进行数据存储、业务逻辑处理等操作。 前端开发需要优先确定好UI设计,保证用户体验。采用现有的设计模板,可以提高开发效率。Android Studio提供了各种UI组件,开发者可以根据需求自由组合,展现出富有交互性、美观合理的UI。 在后端开发中,首先需要搭建数据库环境,设计好数据库表结构。利用MySQL或MySQLite等数据库方便进行数据的存储和管理。后端开发需要使用Web框架如Spring等,通过MVC模型实现数据的处理和返回,方便维护和升级。后端还需要实现一些必要的安全性、架构性、高可用性等功能,确保系统稳定性和数据的安全性。 在前后端交互方面,我们可以采用RESTful API或WebSocket等技术实现数据传输和通讯。Android Studio为了提高开发效率,内置很多便携的第三方库如Simple HTTP Library、Volley等,这些库可以帮助我们实现前后端数据传输和通讯等功能。 综合考虑上述各个方面,我们可以在Android Studio实现前后台分离的选课系统。通过前后端分离,可以使代码层面实现模块化,从而增强系统的可维护性、灵活性和扩展性,同时也分别满足了用户和开发者的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程乐学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值