- 项目功能
- 成果展示
- 1.欢迎页
- 2.登录页
- 3.接受上级任务推送
- 浏览所有任务
- 4.完成任务确认
- 5.编辑备忘录
- 编辑与保存
- 删除备忘
- 6.填报人员信息
- 7.输入姓名进行模糊查询
- 相关代码
- 项目目录结构
- 对应页面代码
- 1.欢迎页
- 2.登录页
- 3.登录后页面的切换
- 4.浏览任务页
- 任务明细页
- 工作备忘录
- 信息填报页
- 信息查询页
- 相关XML代码
- 接收上级任务推送,完成任务确认(“推送”与“确认”使用本地数据库模拟);
- 填报受检人员的身份信息和健康状况,并上报(“上报”使用本地数据库模拟);
- 查询一定筛选条件下的人员信息(“查询”使用本地数据库模拟);
- 简易编辑备忘录的功能(清空,保存);
activity_welcome.xml如下:
WelcomeActivity.java如下
package com.example.communityepidemicassistant;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import androidx.appcompat.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import java.util.Timer;
import java.util.TimerTask;
public class WelcomeActivity extends AppCompatActivity implements View.OnClickListener {
private int recLen = 4;//跳过倒计时提示4秒
private TextView tv;
Timer timer = new Timer();
private Handler handler;
private Runnable runnable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_welcome);
initView();
timer.schedule(task, 1000, 1000);//等待时间一秒,停顿时间一秒
handler = new Handler();
handler.postDelayed(runnable = new Runnable() {
@Override
public void run() {
//从闪屏界面跳转到首界面
Intent intent = new Intent(WelcomeActivity.this, LoginActivity.class);
startActivity(intent);
finish();
}
}, 5000);//延迟5S后发送handler信息
}
private void initView() {
tv = findViewById(R.id.tv);//跳过
tv.setOnClickListener(this);//跳过监听
}
TimerTask task = new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() { // UI thread
@Override
public void run() {
recLen--;
tv.setText("跳过 " + recLen);
if (recLen < 0) {
timer.cancel();
tv.setVisibility(View.GONE);//倒计时到0隐藏字体
}
}
});
}
};
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.tv:
//从闪屏界面跳转到首界面
Intent intent = new Intent(WelcomeActivity.this, LoginActivity.class);
startActivity(intent);
finish();
if (runnable != null) {
handler.removeCallbacks(runnable);
}
break;
default:
break;
}
}
}
2.登录页
activity_login.xml:
LoginActivity.java:
package com.example.communityepidemicassistant;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.content.Intent;
import android.os.Build;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import java.util.ArrayList;
//implements View.onClickListener 之后,
//就可以把onClick事件写到onCreate()方法之外
//这样,onCreate()方法中的代码就不会显得很冗余
public class LoginActivity extends AppCompatActivity implements View.OnClickListener {
private UserDBOpenHelper mUserDBOpenHelper; //声明UserDBOpenHelper对象,这玩意儿用来创建数据表
private Button mBtLogin;
private EditText mEtUsername;
private EditText mEtPassword;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);//把视图层 View 也就是 layout 的内容放到 Activity 中进行显示
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
//修改为深色
this.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
initView();
mUserDBOpenHelper = new UserDBOpenHelper(this); //实例化DBOpenhelper,进行登录验证的时候要用来进行数据查询
mUserDBOpenHelper.add("admin","123456");
}
private void initView(){
//初始化视图中的控件对象
mBtLogin= findViewById(R.id.bt_loginactivity_login);
// mBtLogin.setonClickListener((View.OnClickListener) this);//修改下一行代码
mBtLogin.setOnClickListener(this); //设置点击事件监听器
mEtUsername= findViewById(R.id.et_loginactivity_username);
mEtPassword=findViewById(R.id.et_loginactivity_password);
}
public void onClick(View view){
String name = mEtUsername.getText().toString().trim();
String password = mEtPassword.getText().toString().trim();
if (!TextUtils.isEmpty(name) && !TextUtils.isEmpty(password)) {
ArrayList data = mUserDBOpenHelper.getAllData();
boolean match = false;
for (int i = 0; i < data.size(); i++) {
User user = data.get(i);
if (name.equals(user.getName()) && password.equals(user.getPassword())) {
match = true;
break;
} else {
match = false;
}
}
if (match) {
Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
finish();//销毁此Activity
} else {
Toast.makeText(this, "用户名或密码不正确,请重新输入", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(this, "请输入你的用户名或密码", Toast.LENGTH_SHORT).show();
}
}
}
数据库存储用户信息(账号和密码),验证用户登录。同时要写UserDBOpenHelper类。
User.java
package com.example.communityepidemicassistant;
public class User {
private String name; //用户名
private String password; //密码
public User(String name, String password) {
this.name = name;
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"name='" + name + ''' +
", password='" + password + ''' +
'}';
}
}
UserDBOpenHelper.java:
package com.example.communityepidemicassistant;
import android.annotation.SuppressLint;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.util.ArrayList;
public class UserDBOpenHelper extends SQLiteOpenHelper {
private SQLiteDatabase db; //声明一个AndroidSDK自带的数据库变量db
public UserDBOpenHelper(Context context){ //构造函数
super(context,"db_test",null,1);
db = getReadableDatabase(); //把数据库设置成可写入状态
}
@Override
public void onCreate(SQLiteDatabase db) {
//社区账号密码表
db.execSQL("CREATE TABLE IF NOT EXISTS user(" +
"_id INTEGER PRIMARY KEY AUTOINCREMENT," +
"name TEXT," +
"password TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROp TABLE IF EXISTS user");
onCreate(db);
}
//社区账号密码表的增删改查
public void add(String name,String password){
db.execSQL("INSERT INTO user (name,password) VALUES(?,?)",new Object[]{name,password});
}
public void delete(String name,String password){
db.execSQL("DELETE FROM user WHERe name = AND password ="+name+password);
}
public void update(String password){
db.execSQL("UPDATE user SET password = ?",new Object[]{password});
}
public ArrayList getAllData(){
ArrayList list = new ArrayList();
Cursor cursor = db.query("user",null,null,null,null,null,"name DESC");
while(cursor.moveToNext()){
@SuppressLint("Range") String name = cursor.getString(cursor.getColumnIndex("name"));
@SuppressLint("Range") String password = cursor.getString(cursor.getColumnIndex("password"));
list.add(new User(name,password));
}
return list;
}
}
3.登录后页面的切换
MainActivity中有6个Fragment,包括两个一级Fragment和四个二级Fragment,一级Fragment下各有两个二级Fragment。如下图
activity_main.xml:
fragment1_info.xml:
fragment2_info_report.xml:
fragment2_info_query.xml:
listitem_query.xml:
也是由于要动态加载列表,所以要弄个列表项布局
接下来是java代码(下面的代码实现了点击底部导航栏+滑动顶部滑动选项卡的切换“接受任务”页、“工作备忘”页、“信息填报”页、“信息上报”页的切换。
下面的代码是这四个页里的具体功能的实现。)
MainActivity.java:
package com.example.communityepidemicassistant;
import android.os.Build;
import android.os.Bundle;
import androidx.annotation.NonNull;
import android.view.MenuItem;
import android.view.View;
import android.view.WindowManager;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
import com.google.android.material.bottomnavigation.BottomNavigationView;
public class MainActivity extends AppCompatActivity {
private BottomNavigationView mBottomNavigationView;
private TaskAllFragment taskAllFragment;
private InfoFragment infoFragment;
private Fragment[] fragments;
private int lastfragment; //用于记录上个选择的Fragment
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); //让底部导航栏不被软键盘顶起
setContentView(R.layout.activity_main);
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
//修改为深色
this.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
init();
}
//初始化函数 初始化2个fragment和bottomNavigationView和一个初始显示的fragment
public void init() {
taskAllFragment=new TaskAllFragment();
infoFragment=new InfoFragment();
fragments=new Fragment[]{taskAllFragment,infoFragment};
lastfragment=0; //表示上个被选中的导航栏item
getSupportFragmentManager().beginTransaction().replace(R.id.mainview,taskAllFragment).show(taskAllFragment).commit();
mBottomNavigationView = findViewById(R.id.bv_bottomNavigation);
//mbottomNavigationView 绑定的一个点击监听的函数changeFragment
mBottomNavigationView.setOnNavigationItemSelectedListener(changeFragment);
}
//监听函数changeFragment
private BottomNavigationView.OnNavigationItemSelectedListener changeFragment=new BottomNavigationView.OnNavigationItemSelectedListener() {
//对点击的item的id做判断,然后通过switchFragment函数来进行界面的操作
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
switch (menuItem.getItemId())
{
case R.id.menu_task:
{
if(lastfragment!=0)
{
switchFragment(lastfragment,0);
lastfragment=0;
}
return true;
}
case R.id.menu_info:
{
if (lastfragment!=1)
{
switchFragment(lastfragment,1);
lastfragment=1;
}
return true;
}
}
return false;
}
};
//switchFragment函数,隐藏上个fragment显示选中的fragment
private void switchFragment(int lastfragment,int index){
FragmentTransaction transaction=getSupportFragmentManager().beginTransaction();
transaction.hide(fragments[lastfragment]); //隐藏上个Fragment
if(fragments[index].isAdded()==false)
{
transaction.add(R.id.mainview,fragments[index]);
}
transaction.show(fragments[index]).commitAllowingStateLoss();
}
}
TaskAllFragment.java:
package com.example.communityepidemicassistant;
import android.graphics.Color;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;
import java.util.ArrayList;
import java.util.List;
//和一级fragment fragment1_taskall对应的Java类,作用是实现切换顶部选项卡
public class TaskAllFragment extends Fragment implements View.OnClickListener { // implements View.OnClickListener
private List mList = new ArrayList();
private MyFragmentPagerAdapter myFragmentPagerAdapter;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mList.add(new TaskFragment());
mList.add(new MemoFragment());
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment1_taskall, container, false);
return view;
}
TextView home_textView;
TextView meno_textView;
ViewPager home_viewPager;
public void onViewCreated(View view,Bundle savedInstanceState){
super.onViewCreated(view,savedInstanceState);
home_textView=(TextView)view.findViewById(R.id.tv_taskactivity_task);
meno_textView=(TextView)view.findViewById(R.id.tv_taskactivity_meno);
home_viewPager=(ViewPager)view.findViewById(R.id.mainViewPager);
home_textView.setOnClickListener(this);
meno_textView.setOnClickListener(this);
//在FragmentManger中设置FragmentPagerAdapter必须使用getChildFragmentManger
myFragmentPagerAdapter=new MyFragmentPagerAdapter(this.getChildFragmentManager(), mList);
home_viewPager.setOffscreenPageLimit(2);//ViewPager的缓存为2帧
home_viewPager.setAdapter(myFragmentPagerAdapter);
home_viewPager.setCurrentItem(0);
home_textView.setTextColor(Color.parseColor("#d42517"));
home_viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
changeTextColor(position);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
private void changeTextColor(int position){
if(position==0){
home_textView.setTextColor(Color.parseColor("#d42517"));
meno_textView.setTextColor(Color.parseColor("#696969"));
}else if(position==1) {
meno_textView.setTextColor(Color.parseColor("#d42517"));
home_textView.setTextColor(Color.parseColor("#696969"));
}
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.tv_taskactivity_task:
home_viewPager.setCurrentItem(0,true);
break;
case R.id.tv_taskactivity_meno:
home_viewPager.setCurrentItem(1,true);
break;
}
}
}
InfoFragment.java:
package com.example.communityepidemicassistant;
import android.graphics.Color;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;
import java.util.ArrayList;
import java.util.List;
//和一级fragment fragment1_info对应的Java类,作用是实现切换顶部选项卡
public class InfoFragment extends Fragment implements View.OnClickListener{
private List mList = new ArrayList();
private MyFragmentPagerAdapter myFragmentPagerAdapter;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mList.add(new InfoReportFragment());
mList.add(new InfoQueryFragment());
}
//重写onCreateview方法,将对应的fragment1_info动态加载进来
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment1_info,container,false);
}
TextView home_textView;
TextView query_textView;
ViewPager home_viewPager;
public void onViewCreated(View view,Bundle savedInstanceState){
super.onViewCreated(view,savedInstanceState);
home_textView=(TextView)view.findViewById(R.id.tv_info_report);
query_textView=(TextView)view.findViewById(R.id.tv_info_query);
home_viewPager=(ViewPager)view.findViewById(R.id.mainViewPager_info);
home_textView.setOnClickListener(this);
query_textView.setOnClickListener(this);
//在FragmentManger中设置FragmentPagerAdapter必须使用getChildFragmentManger
myFragmentPagerAdapter=new MyFragmentPagerAdapter(this.getChildFragmentManager(), mList);
home_viewPager.setOffscreenPageLimit(2);//ViewPager的缓存为2帧
home_viewPager.setAdapter(myFragmentPagerAdapter);
home_viewPager.setCurrentItem(0);
home_textView.setTextColor(Color.parseColor("#d42517"));
home_viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
changeTextColor(position);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
private void changeTextColor(int position){
if(position==0){
home_textView.setTextColor(Color.parseColor("#d42517"));
query_textView.setTextColor(Color.parseColor("#696969"));
}else if(position==1) {
query_textView.setTextColor(Color.parseColor("#d42517"));
home_textView.setTextColor(Color.parseColor("#696969"));
}
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.tv_info_report:
home_viewPager.setCurrentItem(0,true);
break;
case R.id.tv_info_query:
home_viewPager.setCurrentItem(1,true);
break;
}
}
}
MyFragmentPagerAdapter.java:
package com.example.communityepidemicassistant;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import java.util.List;
public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
List mList;
public MyFragmentPagerAdapter(FragmentManager fm, ListmList) {
super(fm);
this.mList=mList;
}
@Override
public Fragment getItem(int position) {
return mList.get(position);
}
@Override
public int getCount() {
return mList.size();
}
}
4.浏览任务页
用到了数据库,所以又弄了个任务信息类Task和一个TaskDBOpenHelper。
TaskFragment.java:
package com.example.communityepidemicassistant;
import android.annotation.SuppressLint;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.alertDialog;
import androidx.fragment.app.Fragment;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
//二级Fragment,用于显示任务列表的TaskFragment,实现从本地数据库加载任务信息摘要到列表中和点击任务列表的一项跳转到任务明细activity的功能,以及长按某一列表项删除该任务的功能
public class TaskFragment extends Fragment {
SimpleAdapter mSimpleAdapter;
private ListView listView_task;
private TaskDBOpenHelper mTaskDBOpenHelper; //声明TaskDBOpenHelper对象,这玩意儿用来创建数据表
SQLiteDatabase dbr;
private List mData;
private ImageView iv_iffinished;
private List
Task.java:
package com.example.communityepidemicassistant;
public class Task {
private String task_title;
private String task_date;
private String task_abstract;
private String task_detail;
private String task_iffinished;
private String task_img;
public Task(String task_title, String task_date, String task_abstract,String task_detail,String task_iffinished,String task_img) {
this.task_title = task_title;
this.task_date = task_date;
this.task_abstract = task_abstract;
this.task_detail = task_detail;
this.task_iffinished=task_iffinished;
this.task_img=task_img;
}
public String getTask_title() {
return task_title;
}
public void setTask_title(String task_title) {
this.task_title = task_title;
}
public String getTask_date() {
return task_date;
}
public void setTask_date(String task_date) {
this.task_date = task_date;
}
public String getTask_abstract() {
return task_abstract;
}
public void setTask_abstract(String task_abstract) {
this.task_abstract = task_abstract;
}
public String getTask_detail() {
return task_detail;
}
public void setTask_iffinished(String task_iffinished) {
this.task_iffinished = task_iffinished;
}
public String getTask_iffinished() {
return task_iffinished;
}
public void setTask_detail(String task_detail) {
this.task_detail = task_detail;
}
public String toString(){
return "Task{" +
"title='" + task_title + ''' +
", date='" + task_date + ''' +
",abstract'"+task_abstract+'''+
",detail'"+task_detail+'''+
",iffinished'"+task_iffinished+'''+
",img'"+task_img+'''+
'}';
}
}
TaskDBOpenHelper.java:
package com.example.communityepidemicassistant;
import android.annotation.SuppressLint;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.util.ArrayList;
public class UserDBOpenHelper extends SQLiteOpenHelper {
private SQLiteDatabase db; //声明一个AndroidSDK自带的数据库变量db
public UserDBOpenHelper(Context context){ //构造函数
super(context,"db_test",null,1);
db = getReadableDatabase(); //把数据库设置成可写入状态
}
@Override
public void onCreate(SQLiteDatabase db) {
//社区账号密码表
db.execSQL("CREATE TABLE IF NOT EXISTS user(" +
"_id INTEGER PRIMARY KEY AUTOINCREMENT," +
"name TEXT," +
"password TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS user");
onCreate(db);
}
//社区账号密码表的增删改查
public void add(String name,String password){
db.execSQL("INSERT INTO user (name,password) VALUES(?,?)",new Object[]{name,password});
}
public void delete(String name,String password){
db.execSQL("DELETE FROM user WHERe name = AND password ="+name+password);
}
public void update(String password){
db.execSQL("UPDATE user SET password = ?",new Object[]{password});
}
public ArrayList getAllData(){
ArrayList list = new ArrayList();
Cursor cursor = db.query("user",null,null,null,null,null,"name DESC");
while(cursor.moveToNext()){
@SuppressLint("Range") String name = cursor.getString(cursor.getColumnIndex("name"));
@SuppressLint("Range") String password = cursor.getString(cursor.getColumnIndex("password"));
list.add(new User(name,password));
}
return list;
}
}
任务明细页
activity_task_detail.xml:
TaskDetailActivity.java:
package com.example.communityepidemicassistant;
import android.graphics.Color;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;
import java.util.ArrayList;
import java.util.List;
//和一级fragment fragment1_taskall对应的Java类,作用是实现切换顶部选项卡
public class TaskAllFragment extends Fragment implements View.OnClickListener { // implements View.OnClickListener
private List mList = new ArrayList();
private MyFragmentPagerAdapter myFragmentPagerAdapter;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mList.add(new TaskFragment());
mList.add(new MemoFragment());
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment1_taskall, container, false);
return view;
}
TextView home_textView;
TextView meno_textView;
ViewPager home_viewPager;
public void onViewCreated(View view,Bundle savedInstanceState){
super.onViewCreated(view,savedInstanceState);
home_textView=(TextView)view.findViewById(R.id.tv_taskactivity_task);
meno_textView=(TextView)view.findViewById(R.id.tv_taskactivity_meno);
home_viewPager=(ViewPager)view.findViewById(R.id.mainViewPager);
home_textView.setOnClickListener(this);
meno_textView.setOnClickListener(this);
//在FragmentManger中设置FragmentPagerAdapter必须使用getChildFragmentManger
myFragmentPagerAdapter=new MyFragmentPagerAdapter(this.getChildFragmentManager(), mList);
home_viewPager.setOffscreenPageLimit(2);//ViewPager的缓存为2帧
home_viewPager.setAdapter(myFragmentPagerAdapter);
home_viewPager.setCurrentItem(0);
home_textView.setTextColor(Color.parseColor("#d42517"));
home_viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
changeTextColor(position);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
private void changeTextColor(int position){
if(position==0){
home_textView.setTextColor(Color.parseColor("#d42517"));
meno_textView.setTextColor(Color.parseColor("#696969"));
}else if(position==1) {
meno_textView.setTextColor(Color.parseColor("#d42517"));
home_textView.setTextColor(Color.parseColor("#696969"));
}
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.tv_taskactivity_task:
home_viewPager.setCurrentItem(0,true);
break;
case R.id.tv_taskactivity_meno:
home_viewPager.setCurrentItem(1,true);
break;
}
}
}
工作备忘录
MenoFragment.java:
package com.example.communityepidemicassistant;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.alertDialog;
import androidx.fragment.app.Fragment;
import com.getbase.floatingactionbutton.FloatingActionButton;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class MemoFragment extends Fragment {
private EditText et_meno;
private FloatingActionButton fab_save;
private FloatingActionButton fab_del;
private FileOutputStream fos = null;
private Boolean ifclose=true;
//重写onCreateView 将fragment_meno动态加载进来
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view= inflater.inflate(R.layout.fragment2_memo,container,false);
et_meno=(EditText)view.findViewById(R.id.et_mono);
fab_save=(FloatingActionButton)view.findViewById(R.id.fab_1);
fab_del=(FloatingActionButton)view.findViewById(R.id.fab_2);
onload();
et_meno.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
et_meno.setCursorVisible(true);
if(ifclose){
closeKeybord(et_meno,getContext());
ifclose=false;
}else {
ifclose=true;
}
}
});
fab_save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try{
fos = getActivity().openFileOutput("txt", Context.MODE_PRIVATE);//数据保存到文件
String text = et_meno.getText().toString();
fos.write(text.getBytes());
}catch (Exception e){
e.printStackTrace();
}finally {
try{
if(fos!=null){
fos.flush();
Toast.makeText(getContext(),"保存成功!",Toast.LENGTH_SHORT).show();
hideInputMethod(getContext(), getView());
fos.close();
et_meno.setCursorVisible(false);
}
}catch(Exception e){
e.printStackTrace();
}
}
}
});
fab_del.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
creatdialog();
FileOutputStream fos = null;
try{
fos = getActivity().openFileOutput("txt", Context.MODE_PRIVATE);
String text = "";
fos.write(text.getBytes());
}catch (Exception e){
e.printStackTrace();
}finally {
try{
if(fos!=null){
fos.flush();
fos.close();
}
}catch(Exception e){
e.printStackTrace();
}
}
}
});
return view;
}
public void onload(){
FileInputStream fis = null;
try{
fis = getActivity().openFileInput("txt");//在fragment中,调用getActivity()才能调用openFileInput
if(fis.available()==0){
return;
}else{
byte[] con = new byte[fis.available()];
while(fis.read(con)!=-1){
}
et_meno.setText(new String(con));
et_meno.setSelection(et_meno.getText().length());
et_meno.setCursorVisible(false);
}
}catch(Exception e){
e.printStackTrace();
}
}
private void creatdialog() {
alertDialog.Builder b=new alertDialog.Builder(getContext());
//设置提示框内容
b.setMessage("确认清空备忘录内容么?再想想?");
//设置标题栏
b.setTitle("提示");
b.setIcon(R.drawable.warns);
b.setPositiveButton("确认",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//点确定时隐藏此对话框并将EditText清空
dialog.dismiss();
et_meno.setText("");
hideInputMethod(getContext(), getView());
}
}).setNegativeButton("取消",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//点击取消时只隐藏对话框
dialog.dismiss();
}
});
b.create().show();
}
public static Boolean hideInputMethod(Context context, View v) {
InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
return imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
return false;
}
public static void closeKeybord(EditText mEditText, Context mContext) {
InputMethodManager imm = (InputMethodManager) mContext
.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(mEditText.getWindowToken(), 0);
}
}
信息填报页
又要用到数据库,所以还是弄了个Info类和InfoDBOpenHelper类。
InfoReportFragment.java:
package com.example.communityepidemicassistant;
import android.app.DatePickerDialog;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.text.Editable;
import android.text.InputType;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.text.method.DigitsKeyListener;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
import androidx.fragment.app.Fragment;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class InfoReportFragment extends Fragment {
private EditText et_InfoReport_Date;
private EditText et_InfoReport_Name;
private EditText et_InfoReport_Id;
private EditText et_InfoReport_Phone;
private EditText et_InfoReport_Address;
private RadioGroup rg_iffever;
private RadioButton rb_iffever_yes;
private RadioButton rb_iffever_no;
private EditText et_InfoReport_Tem;
private RadioGroup rg_iftouch;
private RadioButton rb_iftouch_yes;
private RadioButton rb_iftouch_no;
private EditText et_InfoReport_TouchName;
private EditText et_InfoReport_TouchPhone;
private EditText et_InfoReport_TouchDate;
private TextView tv_InfoReport_TouchName;
private TextView tv_InfoReport_TouchPhone;
private TextView tv_InfoReport_TouchDate;
private Button bt_InfoReport_cancel;
private Button bt_InfoReport_submit;
Handler handler = new Handler();
Runnable runnable;
private Drawable drawable_phone;
private InfoDBOpenHelper infoDBOpenHelper;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment2_info_report, container, false);
}
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
init();
infoDBOpenHelper = new InfoDBOpenHelper(getContext());
//为EditText控件设置了两种监听事件,setonClickListener()和setonFocusChangeListener()
// 如果不设置setonFocusChangeListener()需要点击两次EditText控件,第一次获得焦点,第二次点击才会触发setonClickListener()
// 所以为了点击一次就能弹出日期选择框,需要设置setonFocusChangeListener()
et_InfoReport_Date.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
showDatePickerDialog(et_InfoReport_Date);
}
}
});
et_InfoReport_Date.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showDatePickerDialog(et_InfoReport_Date);
}
});
et_InfoReport_TouchDate.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
showDatePickerDialog(et_InfoReport_TouchDate);
}
}
});
et_InfoReport_TouchDate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showDatePickerDialog(et_InfoReport_TouchDate);
}
});
rb_iftouch_yes.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tv_InfoReport_TouchName.setVisibility(View.VISIBLE);
tv_InfoReport_TouchPhone.setVisibility(View.VISIBLE);
tv_InfoReport_TouchDate.setVisibility(View.VISIBLE);
et_InfoReport_TouchName.setVisibility(View.VISIBLE);
et_InfoReport_TouchPhone.setVisibility(View.VISIBLE);
et_InfoReport_TouchDate.setVisibility(View.VISIBLE);
}
});
rb_iftouch_no.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tv_InfoReport_TouchName.setVisibility(View.GONE);
tv_InfoReport_TouchPhone.setVisibility(View.GONE);
tv_InfoReport_TouchDate.setVisibility(View.GONE);
et_InfoReport_TouchName.setVisibility(View.GONE);
et_InfoReport_TouchPhone.setVisibility(View.GONE);
et_InfoReport_TouchDate.setVisibility(View.GONE);
}
});
et_InfoReport_Phone.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (runnable != null) {
handler.removeCallbacks(runnable);
}
runnable = new Runnable() {
@Override
public void run() {
//结束后进行操作
String phone=et_InfoReport_Phone.getText().toString().trim();
Pattern p= Pattern.compile("^((13[0-9])|(15[^4])|(18[0-9])|(17[0-8])|(147,145))\d{8}$");
Matcher m=p.matcher(phone);
if(m.matches()){
et_InfoReport_Phone.setCompoundDrawables(null,null, drawable_phone,null);
}else{
Toast.makeText(getContext(), "请输入正确的手机号码", Toast.LENGTH_SHORT).show();
et_InfoReport_Phone.setCompoundDrawables(null,null,null,null);
}
}
};
handler.postDelayed(runnable, 500);
}
});
et_InfoReport_TouchPhone.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (runnable != null) {
handler.removeCallbacks(runnable);
}
runnable = new Runnable() {
@Override
public void run() {
//结束后进行操作
String phone=et_InfoReport_TouchPhone.getText().toString().trim();
Pattern p= Pattern.compile("^((13[0-9])|(15[^4])|(18[0-9])|(17[0-8])|(147,145))\d{8}$");
Matcher m=p.matcher(phone);
if(m.matches()){
et_InfoReport_TouchPhone.setCompoundDrawables(null,null, drawable_phone,null);
}else{
Toast.makeText(getContext(), "请输入真实信息", Toast.LENGTH_SHORT).show();
et_InfoReport_TouchPhone.setCompoundDrawables(null,null,null,null);
}
}
};
handler.postDelayed(runnable, 500);
}
});
et_InfoReport_Id.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (runnable != null) {
handler.removeCallbacks(runnable);
}
runnable = new Runnable() {
@Override
public void run() {
String idCard=et_InfoReport_Id.getText().toString().trim();
if (IDCardValidate(idCard)==true){
et_InfoReport_Id.setCompoundDrawables(null,null, drawable_phone,null);
}else {
Toast.makeText(getContext(), "请输入真实信息", Toast.LENGTH_SHORT).show();
et_InfoReport_Id.setCompoundDrawables(null,null,null,null);
}
}
};
handler.postDelayed(runnable, 1000);
}
});
bt_InfoReport_cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
et_InfoReport_Date.setText("");
et_InfoReport_Name.setText("");
et_InfoReport_Id.setText("");
et_InfoReport_Phone.setText(null);
et_InfoReport_Address.setText("");
rg_iffever.clearCheck();
et_InfoReport_Tem.setText("");
rg_iftouch.clearCheck();
et_InfoReport_TouchName.setText("");
et_InfoReport_TouchPhone.setText(null);
et_InfoReport_TouchDate.setText("");
}
});
bt_InfoReport_submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String rdate=et_InfoReport_Date.getText().toString().trim();
String rname=et_InfoReport_Name.getText().toString().trim();
String ridCard=et_InfoReport_Id.getText().toString().trim();
String rphone=et_InfoReport_Phone.getText().toString().trim();
String raddress=et_InfoReport_Address.getText().toString().trim();
String rtem=et_InfoReport_Tem.getText().toString().trim();
String rifFever;
if(rb_iffever_no.isChecked()&&!TextUtils.isEmpty(rtem)){
if(Double.parseDouble(rtem)>=36.1&&Double.parseDouble(rtem)<=37.3){
rifFever="否";
}else if((Double.parseDouble(rtem)<=36.1&&Double.parseDouble(rtem)>=14.2)|(Double.parseDouble(rtem)>=37.3&&Double.parseDouble(rtem)<=46.5)){
rifFever="是";
}
else {
rifFever="error";
}
// rifFever="否";
}else if(rb_iffever_yes.isChecked()&&!TextUtils.isEmpty(rtem)){
if(Double.parseDouble(rtem)>=36.1&&Double.parseDouble(rtem)<=37.3){
rifFever="否";
}else if((Double.parseDouble(rtem)<=36.1&&Double.parseDouble(rtem)>=14.2)|(Double.parseDouble(rtem)>=37.3&&Double.parseDouble(rtem)<=46.5)){
rifFever="是";
}else {
rifFever="error";
}
// rifFever="是";
}else {
rifFever="空";
}
String rifTouch;
if(rb_iftouch_no.isChecked()){
rifTouch="否";
}else if(rb_iftouch_yes.isChecked()){
rifTouch ="是";
}else {
rifTouch="";
}
String rtouchName=et_InfoReport_TouchName.getText().toString().trim();
String rtouchPhone=et_InfoReport_TouchPhone.getText().toString().trim();
String rtouchDate=et_InfoReport_TouchDate.getText().toString().trim();
if(rifTouch=="是"){
if (!TextUtils.isEmpty(rdate) && !TextUtils.isEmpty(rname)&&
!TextUtils.isEmpty(ridCard)&& !TextUtils.isEmpty(rphone)&&
!TextUtils.isEmpty(raddress)&& !TextUtils.isEmpty(rifFever)&&
!TextUtils.isEmpty(rtem)&& !TextUtils.isEmpty(rifTouch)&&
!TextUtils.isEmpty(rtouchDate)&& !TextUtils.isEmpty(rtouchPhone)&&
!TextUtils.isEmpty(rtouchDate) && rifFever!="空"){
if(rifFever=="error"){
Toast.makeText(getContext(), "体温超过人体极限,请重新填写!", Toast.LENGTH_SHORT).show();
}else{
infoDBOpenHelper.infoAdd(rdate,rname,ridCard,rphone,raddress,rifFever,rtem,rifTouch,
rtouchName,rtouchPhone,rtouchDate);
Toast.makeText(getContext(), "提交成功", Toast.LENGTH_SHORT).show();
setDrawableRightGone();
clearAll();
}
}else {
Toast.makeText(getContext(), "提交失败,请完善信息", Toast.LENGTH_SHORT).show();
setDrawableRightGone();
}
}else if(rifTouch=="否"){
if (!TextUtils.isEmpty(rdate) && !TextUtils.isEmpty(rname)&&
!TextUtils.isEmpty(ridCard)&& !TextUtils.isEmpty(rphone)&&
!TextUtils.isEmpty(raddress)&& !TextUtils.isEmpty(rifFever)&&
!TextUtils.isEmpty(rtem)&&rifFever!="空"){
if(rifFever=="error"){
Toast.makeText(getContext(), "体温超过人体极限,请重新填写!", Toast.LENGTH_SHORT).show();
}else{
infoDBOpenHelper.infoAdd(rdate,rname,ridCard,rphone,raddress,rifFever,rtem,rifTouch,
rtouchName,rtouchPhone,rtouchDate);
Toast.makeText(getContext(), "提交成功", Toast.LENGTH_SHORT).show();
setDrawableRightGone();
clearAll();
}
}else {
Toast.makeText(getContext(), "提交失败,请完善信息", Toast.LENGTH_SHORT).show();
setDrawableRightGone();
}
}
else {
Toast.makeText(getContext(), "提交失败,请完善信息", Toast.LENGTH_SHORT).show();
setDrawableRightGone();
}
}
});
}
private void setDrawableRightGone(){
et_InfoReport_Id.setCompoundDrawables(null,null,null,null);
et_InfoReport_Phone.setCompoundDrawables(null,null,null,null);
et_InfoReport_TouchPhone.setCompoundDrawables(null,null,null,null);
}
//初始化
private void init() {
et_InfoReport_Date = (EditText) getView().findViewById(R.id.et_InfoReport_Date);
et_InfoReport_Name = (EditText) getView().findViewById(R.id.et_InfoReport_Name);
et_InfoReport_Id = (EditText) getView().findViewById(R.id.et_InfoReport_Id);
et_InfoReport_Phone = (EditText) getView().findViewById(R.id.et_InfoReport_Phone);
et_InfoReport_Address = (EditText) getView().findViewById(R.id.et_InfoReport_Address);
rg_iffever = (RadioGroup) getView().findViewById(R.id.rg_iffever);
rb_iffever_yes = (RadioButton) getView().findViewById(R.id.rb_iffever_yes);
rb_iffever_no = (RadioButton) getView().findViewById(R.id.rb_iffever_no);
et_InfoReport_Tem = (EditText) getView().findViewById(R.id.et_InfoReport_Tem);
rg_iftouch = (RadioGroup) getView().findViewById(R.id.rg_iftouch);
rb_iftouch_yes = (RadioButton) getView().findViewById(R.id.rb_iftouch_yes);
rb_iftouch_no = (RadioButton) getView().findViewById(R.id.rb_iftouch_no);
et_InfoReport_TouchName = (EditText) getView().findViewById(R.id.et_InfoReport_TouchName);
et_InfoReport_TouchPhone = (EditText) getView().findViewById(R.id.et_InfoReport_TouchPhone);
et_InfoReport_TouchDate = (EditText) getView().findViewById(R.id.et_InfoReport_TouchDate);
tv_InfoReport_TouchName = (TextView) getView().findViewById(R.id.tv_InfoReport_TouchName);
tv_InfoReport_TouchPhone = (TextView) getView().findViewById(R.id.tv_InfoReport_TouchPhone);
tv_InfoReport_TouchDate = (TextView) getView().findViewById(R.id.tv_InfoReport_TouchDate);
bt_InfoReport_cancel = (Button) getView().findViewById(R.id.bt_InfoReport_cancel);
bt_InfoReport_submit = (Button) getView().findViewById(R.id.bt_InfoReport_submit);
drawable_phone = getResources().getDrawable(R.drawable.yesok);
drawable_phone.setBounds(0, 0, 55, 55);
et_InfoReport_Phone.setCompoundDrawables(null,null, null,null);
et_InfoReport_TouchPhone.setCompoundDrawables(null,null, null,null);
et_InfoReport_Id.setCompoundDrawables(null,null,null,null);
et_InfoReport_Date.setInputType(InputType.TYPE_NULL);//点击输入日期的EditText时不显示软件盘
et_InfoReport_TouchDate.setInputType(InputType.TYPE_NULL);
tv_InfoReport_TouchName.setVisibility(View.GONE);//是否接触疑似、确诊病例的RadioButton还未选择时隐藏选择为“是”时显示的控件
tv_InfoReport_TouchPhone.setVisibility(View.GONE);
tv_InfoReport_TouchDate.setVisibility(View.GONE);
et_InfoReport_TouchName.setVisibility(View.GONE);
et_InfoReport_TouchPhone.setVisibility(View.GONE);
et_InfoReport_TouchDate.setVisibility(View.GONE);
String num = "0123456789";
et_InfoReport_Phone.setInputType(InputType.TYPE_CLASS_NUMBER);//限制只能输入数字
et_InfoReport_TouchPhone.setInputType(InputType.TYPE_CLASS_NUMBER);
et_InfoReport_Phone.setKeyListener(DigitsKeyListener.getInstance(num));
et_InfoReport_TouchPhone.setKeyListener(DigitsKeyListener.getInstance(num));
et_InfoReport_Phone.setInputType(InputType.TYPE_CLASS_NUMBER);
et_InfoReport_Phone.setKeyListener(DigitsKeyListener.getInstance(num));
}
private void showDatePickerDialog(final EditText et) {
Calendar c = Calendar.getInstance();
new DatePickerDialog(getContext(), new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
et.setText(year + "/" + (monthOfYear + 1) + "/" + dayOfMonth);
}
}, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)).show();
}
private void clearAll(){
et_InfoReport_Date.setText("");
et_InfoReport_Name.setText("");
et_InfoReport_Id.setText("");
et_InfoReport_Phone.setText("");
et_InfoReport_Address.setText("");
rg_iffever.clearCheck();
et_InfoReport_Tem.setText("");
rg_iftouch.clearCheck();
et_InfoReport_TouchName.setText("");
et_InfoReport_TouchPhone.setText("");
et_InfoReport_TouchDate.setText("");
}
public static boolean IDCardValidate(String IDStr) {
@SuppressWarnings("unused")
String errorInfo = "";// 记录错误信息
String[] ValCodeArr = { "1", "0", "X", "9", "8", "7", "6", "5", "4",
"3", "2" };
String[] Wi = { "7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7",
"9", "10", "5", "8", "4", "2" };
String Ai = "";
// ================ 号码的长度 15位或18位 ================
if (IDStr.length() != 15 && IDStr.length() != 18) {
errorInfo = "身份证号码长度应该为15位或18位。";
return false;
}
// =======================(end)========================
// ================ 数字 除最后以为都为数字 ================
if (IDStr.length() == 18) {
Ai = IDStr.substring(0, 17);
} else if (IDStr.length() == 15) {
Ai = IDStr.substring(0, 6) + "19" + IDStr.substring(6, 15);
}
if (isNumeric(Ai) == false) {
errorInfo = "身份证15位号码都应为数字 ; 18位号码除最后一位外,都应为数字。";
return false;
}
// =======================(end)========================
// ================ 出生年月是否有效 ================
String strYear = Ai.substring(6, 10);// 年份
String strMonth = Ai.substring(10, 12);// 月份
String strDay = Ai.substring(12, 14);// 月份
if (isDate(strYear + "-" + strMonth + "-" + strDay) == false) {
errorInfo = "身份证生日无效。";
return false;
}
GregorianCalendar gc = new GregorianCalendar();
SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd");
try {
if ((gc.get(Calendar.YEAR) - Integer.parseInt(strYear)) > 150
|| (gc.getTime().getTime() - s.parse(
strYear + "-" + strMonth + "-" + strDay).getTime()) < 0) {
errorInfo = "身份证生日不在有效范围。";
return false;
}
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (java.text.ParseException e) {
e.printStackTrace();
}
if (Integer.parseInt(strMonth) > 12 || Integer.parseInt(strMonth) == 0) {
errorInfo = "身份证月份无效";
return false;
}
if (Integer.parseInt(strDay) > 31 || Integer.parseInt(strDay) == 0) {
errorInfo = "身份证日期无效";
return false;
}
// =====================(end)=====================
// ================ 地区码时候有效 ================
Map h = GetAreaCode();
if (h.get(Ai.substring(0, 2)) == null) {
errorInfo = "身份证地区编码错误。";
return false;
}
// ==============================================
// ================ 判断最后一位的值 ================
int TotalmulAiWi = 0;
for (int i = 0; i < 17; i++) {
TotalmulAiWi = TotalmulAiWi
+ Integer.parseInt(String.valueOf(Ai.charAt(i)))
* Integer.parseInt(Wi[i]);
}
int modValue = TotalmulAiWi % 11;
String strVerifyCode = ValCodeArr[modValue];
Ai = Ai + strVerifyCode;
if (IDStr.length() == 18) {
if (Ai.equals(IDStr) == false) {
errorInfo = "身份证无效,不是合法的身份证号码";
return false;
}
}
// =====================(end)=====================
return true;
}
private static Map GetAreaCode() {
Map hashtable = new HashMap();
hashtable.put("11", "北京");
hashtable.put("12", "天津");
hashtable.put("13", "河北");
hashtable.put("14", "山西");
hashtable.put("15", "内蒙古");
hashtable.put("21", "辽宁");
hashtable.put("22", "吉林");
hashtable.put("23", "黑龙江");
hashtable.put("31", "上海");
hashtable.put("32", "江苏");
hashtable.put("33", "浙江");
hashtable.put("34", "安徽");
hashtable.put("35", "福建");
hashtable.put("36", "江西");
hashtable.put("37", "山东");
hashtable.put("41", "河南");
hashtable.put("42", "湖北");
hashtable.put("43", "湖南");
hashtable.put("44", "广东");
hashtable.put("45", "广西");
hashtable.put("46", "海南");
hashtable.put("50", "重庆");
hashtable.put("51", "四川");
hashtable.put("52", "贵州");
hashtable.put("53", "云南");
hashtable.put("54", "西藏");
hashtable.put("61", "陕西");
hashtable.put("62", "甘肃");
hashtable.put("63", "青海");
hashtable.put("64", "宁夏");
hashtable.put("65", "新疆");
hashtable.put("71", "台湾");
hashtable.put("81", "香港");
hashtable.put("82", "澳门");
hashtable.put("91", "国外");
return hashtable;
}
private static boolean isNumeric(String str) {
Pattern pattern = Pattern.compile("[0-9]*");
Matcher isNum = pattern.matcher(str);
if (isNum.matches()) {
return true;
} else {
return false;
}
}
//功能:判断字符串是否为日期格式//
public static boolean isDate(String strDate) {
String regxStr = "^((\d{2}(([02468][048])|([13579][26]))[\-\/\s]?((((0?[13578])|(1[02]))" +
"[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])" +
"|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|([1-2][0-9])))))|(\d{2}(([02468][1235679])" +
"|([13579][01345789]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))" +
"|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?" +
"((0?[1-9])|(1[0-9])|(2[0-8]))))))(\s(((0?[0-9])|([1-2][0-3]))\:([0-5]?[0-9])((\s)|(\:([0-5]?[0-9])))))?$";
Pattern pattern = Pattern.compile(regxStr);
Matcher m = pattern.matcher(strDate);
if (m.matches()) {
return true;
} else {
return false;
}
}
}
Info.java:
package com.example.communityepidemicassistant;
public class Info {
private String date;
private String name;
private String idCard;
private String phone;
private String address;
private String ifFever;
private String tem;
private String ifTouch;
private String touchName;
private String touchPhone;
private String touchDate;
public Info(String date, String name, String idCard, String phone, String address, String ifFever,
String tem, String ifTouch, String touchName, String touchPhone, String touchDate) {
this.date = date;
this.name = name;
this.idCard = idCard;
this.phone = phone;
this.address = address;
this.ifFever = ifFever;
this.tem = tem;
this.ifTouch = ifTouch;
this.touchName = touchName;
this.touchPhone = touchPhone;
this.touchDate = touchDate;
}
public void setDate(String date) {
this.date = date;
}
public void setName(String name) {
this.name = name;
}
public void setIdCard(String idCard) {
this.idCard = idCard;
}
public void setPhone(String phone) {
this.phone = phone;
}
public void setAddress(String address) {
this.address = address;
}
public void setIfFever(String ifFever) {
this.ifFever = ifFever;
}
public void setTem(String tem) {
this.tem = tem;
}
public void setIfTouch(String ifTouch) {
this.ifTouch = ifTouch;
}
public void setTouchName(String touchName) {
this.touchName = touchName;
}
public void setTouchPhone(String touchPhone) {
this.touchPhone = touchPhone;
}
public void setTouchDate(String touchDate) {
this.touchDate = touchDate;
}
public String getDate() {
return date;
}
public String getName() {
return name;
}
public String getIdCard() {
return idCard;
}
public String getPhone() {
return phone;
}
public String getAddress() {
return address;
}
public String getIfFever() {
return ifFever;
}
public String getTem() {
return tem;
}
public String getIfTouch() {
return ifTouch;
}
public String getTouchName() {
return touchName;
}
public String getTouchPhone() {
return touchPhone;
}
public String getTouchDate() {
return touchDate;
}
}
InfoDBOpenHelper.java:
package com.example.communityepidemicassistant;
import android.annotation.SuppressLint;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.util.ArrayList;
public class InfoDBOpenHelper extends SQLiteOpenHelper {
private SQLiteDatabase db; //声明一个AndroidSDK自带的数据库变量db
public InfoDBOpenHelper(Context context){
super(context,"db_info",null,1);
db = getReadableDatabase(); //把数据库设置成可写入状态
}
@Override
public void onCreate(SQLiteDatabase db) {
//社区人员健康信息表
db.execSQL("CREATE TABLE IF NOT EXISTS info("+
"_id INTEGER PRIMARY KEY AUTOINCREMENT," +
"date DATE," +
"name TEXT," +
"idCard TEXT UNIQUE," +
"phone TEXT," +
"address TEXT," +
"ifFever TEXT,"+ // 存入数据库的值为是或否
"tem TEXT,"+
"ifTouch TEXT,"+
"touchName TEXT,"+
"touchPhone TEXT,"+
"touchDate DATE)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS info");
onCreate(db);
}
//社区人员健康信息表的增查
public void infoAdd(String rdate,String rname,String ridCard,String rphone,String raddress,String rifFever,String rtem,String rifTouch,String rtouchName,String rtouchPhone,String rtouchDate){
db.execSQL("INSERT OR REPLACE INTO info(date,name,idCard,phone,address,ifFever,tem,ifTouch,touchName,touchPhone,touchDate)VALUES(?,?,?,?,?,?,?,?,?,?,?)",
new Object[]{rdate,rname,ridCard,rphone,raddress,rifFever,rtem,rifTouch,rtouchName,rtouchPhone,rtouchDate});
}
public ArrayList getInfoData(){
ArrayList list = new ArrayList();
Cursor cursor = db.query("info",null,null,null,null,null,"name DESC");
while(cursor.moveToNext()){
@SuppressLint("Range") String date=cursor.getString(cursor.getColumnIndex("date"));
@SuppressLint("Range") String name = cursor.getString(cursor.getColumnIndex("name"));
@SuppressLint("Range") String idCard = cursor.getString(cursor.getColumnIndex("idCard"));
@SuppressLint("Range") String phone = cursor.getString(cursor.getColumnIndex("phone"));
@SuppressLint("Range") String address = cursor.getString(cursor.getColumnIndex("address"));
@SuppressLint("Range") String ifFever = cursor.getString(cursor.getColumnIndex("ifFever"));
@SuppressLint("Range") String tem = cursor.getString(cursor.getColumnIndex("tem"));
@SuppressLint("Range") String ifTouch = cursor.getString(cursor.getColumnIndex("iftouch"));
@SuppressLint("Range") String touchName = cursor.getString(cursor.getColumnIndex("touchName"));
@SuppressLint("Range") String touchPhone = cursor.getString(cursor.getColumnIndex("touchPhone"));
@SuppressLint("Range") String touchDate = cursor.getString(cursor.getColumnIndex("touchDate"));
list.add(new Info(date,name,idCard,phone,address,ifFever,tem,ifTouch,touchName,touchPhone,touchDate));
}
return list;
}
}
信息查询页
InfoQueryFragment.java:
package com.example.communityepidemicassistant;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.SimpleCursorAdapter;
import androidx.appcompat.widget.SearchView;
import androidx.fragment.app.Fragment;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
//二级Fragment,用于社区人员疫情信息查询的InfoQueryFragment,实现把疫情信息载入本地数据库的功能
public class InfoQueryFragment extends Fragment {
SimpleAdapter mSimpleAdapter;
SimpleCursorAdapter mAdapter;
private SearchView search;
private ListView listView_info;
private InfoDBOpenHelper mInfoDBOpenHelper;
SQLiteDatabase dbinfo;
private List mData;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view= inflater.inflate(R.layout.fragment2_info_query,container,false);
search=(SearchView)view.findViewById(R.id.sv_search);
search.setIconified(false);
listView_info=(ListView)view.findViewById(R.id.listView_info);
init();
return view;
}
@Override
public void onResume() {
super.onResume();
refresh();
mAdapter=new SimpleCursorAdapter(getContext(),R.layout.listitem_query,
null,
new String[]{"name","date","ifFever","ifTouch","idCard","phone","address"},
new int[]{R.id.tv_listitem_infoName,R.id.tv_listitem_infoDate,R.id.tv_listitem_infoIfFever, R.id.tv_listitem_infoIfTouch,
R.id.tv_listitem_infoID,R.id.tv_listitem_infoPhone,R.id.tv_listitem_infoAddress},
0);
listView_info.setAdapter(mAdapter);
search.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
if(!TextUtils.isEmpty(newText)){
Cursor cursor=dbinfo.query("info",
null,
"name like '%"+newText+"%'",
null,
null,
null,
"date DESC");
mAdapter.swapCursor(cursor);
}else {
mAdapter.swapCursor(null);
}
return false;
}
});
}
private void init(){
mInfoDBOpenHelper=new InfoDBOpenHelper(getContext());
dbinfo=mInfoDBOpenHelper.getReadableDatabase();
}
private List> getData() {
List> list = new ArrayList<>();
//查询数据
Cursor c = dbinfo.query("info", //query函数返回一个游标c
null,
null, //筛选条件
null, //筛选值
null,
null,
"date DESC");
if (c.getCount() > 0) {
c.moveToFirst();
for (int i = 0; i < c.getCount(); i++) {
String name = c.getString(c.getColumnIndexOrThrow("name"));
String date = c.getString(c.getColumnIndexOrThrow("date"));
String ifFever = c.getString(c.getColumnIndexOrThrow("ifFever"));
String ifTouch = c.getString(c.getColumnIndexOrThrow("ifTouch"));
String id = c.getString(c.getColumnIndexOrThrow("idCard"));
String phone= c.getString(c.getColumnIndexOrThrow("phone"));
String address = c.getString(c.getColumnIndexOrThrow("address"));
//把值添加到listview的数据集中
Map map = new HashMap<>();
map.put("name", name); //"xx"是数据库中的数据,xx是把数据库中的数据拿出来变成的string
map.put("date", date);
map.put("ifFever", ifFever);
map.put("ifTouch", ifTouch);
map.put("idCard", id);
map.put("phone", phone);
map.put("address", address);
list.add(map);
c.moveToNext();
}
}
c.close();
dbinfo.close();
return list;
}
private void refresh(){
onCreate(null);
}
}
SearchService.java:
package com.example.communityepidemicassistant;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class SearchService extends Service {
public SearchService(){
}
@Override
public IBinder onBind(Intent intent) {
return new Binder();
}
public class Binder extends android.os.Binder{
public SearchService getService(){
return SearchService.this;
}
}
}
相关XML代码
colors.xml
#FFBB86FC #FF6200EE #FF3700B3 #FF03DAC5 #FF018786 #FFFFFFFF #F0FFFF #FFFFFF #FCFCFC #F5F5F5 #33728dff #efafad #d42517 #696969 #000000 #C3A6 #10aec2 #008B8B #57c3c2 #5CACEE #2196f2 #1ba784 #57c3c2 #10aec2 #ffeffa
strings.xml
宜宾防疫 接收任务 工作备忘 信息上报 信息查询 点击此处输入文字
ic_launcher_background.xml:
#A7E5FF
AndroidManifest.xml



