package com.example.notebook.activity;
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.example.notebook.R;
import com.example.notebook.adapter.NotebookAdapter;
import com.example.notebook.bean.NotebookBean;
import com.example.notebook.db.DBManager;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private static final String TAG = MainActivity.class.getSimpleName();
private static final int QR_CODE = 1001;
private static final int REQUEST_CODE = 1002;
private RecyclerView recyclerView;
private Button btnAdd;
private List<NotebookBean> mNotebookList;
private NotebookAdapter mAdapter;
private DBManager mDBManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
checkPermission();
initView();
initRecyclerView();
mDBManager = new DBManager(this);
getNotebookList();
}
/**
* 绑定视图VIEW
*/
private void initView() {
recyclerView = findViewById(R.id.recycler_view);
btnAdd = findViewById(R.id.btn_add);
btnAdd.setOnClickListener(this);
}
private void initRecyclerView(){
mNotebookList = new ArrayList<>();
mAdapter = new NotebookAdapter(R.layout.item_notebook, mNotebookList);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(mAdapter);
mAdapter.bindToRecyclerView(recyclerView);
mAdapter.setEmptyView(R.layout.view_no_data);
mAdapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {
@Override
public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
Intent intent = new Intent(MainActivity.this, AddNotebookActivity.class);
intent.putExtra("isAdd", false);
intent.putExtra("notebook", mNotebookList.get(position));
startActivityForResult(intent, REQUEST_CODE);
}
});
mAdapter.setOnItemChildLongClickListener(new BaseQuickAdapter.OnItemChildLongClickListener() {
@Override
public boolean onItemChildLongClick(BaseQuickAdapter adapter, View view, int position) {
showDeleteDialog(position, mNotebookList.get(position).getNotebookId());
return true;
}
});
}
private void getNotebookList(){
mNotebookList.clear();
mNotebookList.addAll(mDBManager.selectNotebookList());
mAdapter.notifyDataSetChanged();
}
private void showDeleteDialog(final int position, final int notebookId){
View view = LayoutInflater.from(this).inflate(R.layout.dialog_delete_notebook, null, false);
AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setView(view);
final AlertDialog alertDialog = builder.create();
alertDialog.show();
alertDialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
view.findViewById(R.id.btn_confirm).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mDBManager.deleteNotebook(notebookId);
alertDialog.dismiss();
mNotebookList.remove(position);
mAdapter.notifyItemRemoved(position);
mAdapter.notifyItemRangeChanged(position, mNotebookList.size() - position);
}
});
view.findViewById(R.id.btn_cancel).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
alertDialog.dismiss();
}
});
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_add:// 点击添加按钮
Intent intent = new Intent(MainActivity.this, AddNotebookActivity.class);
intent.putExtra("isAdd", true);
startActivityForResult(intent, REQUEST_CODE);
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK){
getNotebookList();
}
}
/*************连续点击两次退出应用******************/
// 用来计算返回键的点击间隔时间
private boolean keyPress = true;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
//判断按下的键是否是返回键
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (keyPress) {
Toast.makeText(MainActivity.this, "再按一次返回键退出记事本", Toast.LENGTH_SHORT).show();
keyPress = false;
//使用定时器修改keyPress的值,按下两秒后将keyPress设为true
new Timer().schedule(new TimerTask() {
@Override
public void run() {
keyPress = true;
}
}, 2000);
} else {
//关闭页面
finish();
}
return false;
}
return super.onKeyDown(keyCode, event);
}
/************************检查授权相关********************************/
private List<String> requestPermissions;
// 申请权限相关
private static String[] permissions = new String[]{ Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE
};
private boolean checkPermission() {
boolean flag = true;
requestPermissions = new ArrayList<>();
if (ContextCompat.checkSelfPermission(this, permissions[0]) == PackageManager.PERMISSION_DENIED) {
requestPermissions.add(permissions[0]);
flag = false;
}
if (ContextCompat.checkSelfPermission(this, permissions[1]) == PackageManager.PERMISSION_DENIED) {
requestPermissions.add(permissions[1]);
flag = false;
}
return flag;
}
}
Android studio 大作业 简单的备忘录

【Android Studio大作业:简单的备忘录】
在Android开发领域,Android Studio是主流的集成开发环境(IDE),它为开发者提供了高效、便捷的工具来构建应用程序。本项目是一个基于Android Studio的大作业,主要目标是创建一个简单的备忘录应用。这个备忘录应用将帮助用户记录日常生活中的待办事项或重要信息,提升生活与工作的组织效率。
**1. Android Studio的使用**
Android Studio集成了代码编辑、调试、构建、测试和发布等多种功能。在导入提供的压缩包资源后,开发者首先需要启动Android Studio并选择“Open an existing Android Studio project”选项,然后定位到解压后的文件夹,导入项目。
**2. 项目结构**
Android Studio的项目结构通常包括以下几个主要部分:
- `app`: 应用模块,包含了源代码、资源文件等。
- `build.gradle`: 模块级别的构建脚本,定义了项目的依赖、版本信息等。
- `gradle.properties`: 项目属性文件,可以设置全局的Gradle属性。
- `settings.gradle`: 定义项目包含的模块。
- `AndroidManifest.xml`: 应用程序清单文件,包含了应用的基本信息及权限声明。
**3. 创建用户界面**
备忘录应用的核心在于用户界面。在Android中,我们通常使用XML布局文件来设计界面,如`activity_main.xml`。这可能包括EditText用于输入备忘内容,Button用于添加、删除或保存备忘,以及ListView或RecyclerView用于显示备忘列表。布局文件通过在Activity的onCreate()方法中加载,如`setContentView(R.layout.activity_main)`。
**4. 数据管理**
备忘录的数据存储通常有以下几种方式:
- Shared Preferences:适合存储少量轻量级数据,如用户偏好设置。
- SQLite数据库:适用于结构化的数据,可以进行增删改查操作。
- 文件系统:可以存储任意格式的文件,但操作相对复杂。
- ContentProvider:为其他应用提供数据访问接口。
考虑到简单性,此项目可能会使用SQLite数据库或者Shared Preferences来存储备忘录数据。
**5. 活动(Activity)与意图(Intent)**
在Android中,Activity是用户界面的容器,Intent用于在不同组件间传递信息。添加备忘可能涉及启动新的Activity来收集用户输入,完成后通过Intent返回结果。
**6. 虚拟机配置**
在Android Studio中,开发者可以使用AVD(Android Virtual Device)来模拟真实的Android设备。在AVD Manager中创建新的虚拟设备,配置CPU/ABI、屏幕分辨率、内存大小等参数,然后启动虚拟机进行应用的调试和测试。
**7. 测试与调试**
Android Studio内置了强大的调试工具,包括Logcat用于查看应用日志,Breakpoints用于设置断点,Step Over/Into/Out功能帮助理解代码执行流程。同时,JUnit和Espresso库支持单元测试和UI测试,确保应用的稳定性和功能正确性。
**8. 发布应用**
完成开发和测试后,可以通过Android Studio的Build菜单选择Generate Signed Bundle / APK来打包应用,并通过Google Play Console或其他分发平台发布。
总结,这个Android Studio的大作业旨在让开发者熟悉基本的Android应用开发流程,包括UI设计、数据管理、活动交互、虚拟机调试以及应用发布等多个环节。通过实践,开发者可以深入理解Android应用开发的核心概念和技术。

小小程序员.¥
- 粉丝: 362
最新资源
- 双闭环直流调速系统设计及matlab仿真验证(.doc
- 单片机秒表研究设计课程研究设计报告.doc
- 网络资源在高中信息技术教学中的应用分析.docx
- (源码)基于Go语言的TikBase分布式KV存储系统.zip
- 电脑游戏录屏软件使用的具体步骤.docx
- 公路工程施工项目管理技术的应用研究.docx
- 大数据背景下的图书馆信息咨询服务探究.docx
- 云计算安全可靠性研究-软件技术.doc
- 第一章ChemCAD软件介绍.doc
- 农业机械设计制造中自动化技术的应用探析.docx
- vue3-ts-cesium-map-show-Typescript资源
- 四川建龙软件全套表格2018(监理).doc
- docopt.go-Go资源
- 潮州美食网网站建设毕业方案.doc
- Apache-php-mysql在windows下的安装与配置图解(最新版)9.doc
- 在中职计算机教学中实施多元化评价的探究.docx