功能实现
运行结果
我的代码:
布局:
登陆界面:activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
tools:context=".MainActivity">
<ImageView
android:id="@+id/photo"
android:layout_width="165dp"
android:layout_height="177dp"
android:layout_marginStart="16dp"
android:layout_marginTop="32dp"
android:layout_marginEnd="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/login2" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="50dp"
android:text="用户名"
android:textSize="24sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/photo" />
<EditText
android:id="@+id/user"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:ems="10"
android:hint="由字母或数字组成"
android:inputType="text"
android:maxLength="11"
android:textSize="24sp"
app:layout_constraintBaseline_toBaselineOf="@+id/textView1"
app:layout_constraintStart_toEndOf="@+id/textView1" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="25dp"
android:text="密 码"
android:textSize="24sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView1" />
<EditText
android:id="@+id/password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="30dp"
android:ems="10"
android:hint="不超过10个字符"
android:inputType="textPassword"
android:maxLength="10"
android:textSize="24sp"
app:layout_constraintBaseline_toBaselineOf="@+id/textView2"
app:layout_constraintStart_toEndOf="@+id/textView2" />
<CheckBox
android:id="@+id/remember"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="32dp"
android:text="记住我"
android:textSize="20sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView2" />
<Button
android:id="@+id/login"
android:layout_width="379dp"
android:layout_height="66dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="36dp"
android:backgroundTint="@android:color/holo_green_light"
android:text="登录"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
日记栏recyclerview界面:activity_diary_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:background="#2FC19F9F"
tools:context=".DiaryMain">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleX="0.9"
tools:layout_editor_absoluteX="1dp"
tools:layout_editor_absoluteY="1dp" />
<ImageButton
android:id="@+id/btn_add"
android:layout_width="78dp"
android:layout_height="78dp"
android:layout_marginEnd="4dp"
android:layout_marginBottom="68dp"
android:background="#00000000"
android:scaleType="fitXY"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:srcCompat="@android:drawable/ic_input_add" />
</androidx.constraintlayout.widget.ConstraintLayout>
日记编辑界面:activity_edit_diary.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:id="@+id/RatativeLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".EditDiary">
<TextView
android:id="@+id/tv_edit_time"
android:layout_width="66dp"
android:layout_height="29dp"
android:layout_marginStart="32dp"
android:layout_marginTop="52dp"
android:gravity="center"
android:text="日期"
android:textSize="20sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_edit_title"
android:layout_width="66dp"
android:layout_height="29dp"
android:layout_marginStart="32dp"
android:layout_marginTop="132dp"
android:gravity="center"
android:text="标题"
android:textSize="20sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/et_edit_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="40dp"
android:ems="10"
android:inputType="textPersonName"
app:layout_constraintBaseline_toBaselineOf="@+id/tv_edit_title"
app:layout_constraintStart_toEndOf="@+id/tv_edit_title" />
<TextView
android:id="@+id/tv_edit_content"
android:layout_width="66dp"
android:layout_height="29dp"
android:layout_marginStart="32dp"
android:layout_marginTop="212dp"
android:gravity="center"
android:text="内容"
android:textSize="20sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/et_edit_content"
android:layout_width="334dp"
android:layout_height="337dp"
android:layout_marginStart="48dp"
android:layout_marginBottom="68dp"
android:background="@android:drawable/edit_text"
android:enabled="true"
android:gravity="top"
android:inputType="textMultiLine"
android:maxLines="10"
android:scrollbars="vertical"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:id="@+id/tv_edit_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="40dp"
android:layout_marginTop="52dp"
android:text="TextView"
android:textSize="20sp"
app:layout_constraintStart_toEndOf="@+id/tv_edit_time"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
日记编辑界面的actionbar:myactionbar.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:background="@android:color/holo_green_light">
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:paddingLeft="10dp"
android:paddingRight="10dp" >
<TextView
android:id="@+id/title"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Edit Diary"
android:textColor="#FFFFFFFF"
android:textSize="30sp"
android:textStyle="bold" />
<ImageView
android:id="@+id/iv_return"
android:layout_width="75dp"
android:layout_height="65dp"
android:layout_alignBottom="@+id/iv_confirm"
android:layout_marginStart="0dp"
android:layout_marginEnd="55dp"
android:layout_marginBottom="7dp"
android:layout_toStartOf="@+id/title"
android:gravity="center"
app:srcCompat="?attr/homeAsUpIndicator" />
<ImageView
android:id="@+id/iv_confirm"
android:layout_width="112dp"
android:layout_height="75dp"
android:layout_alignBottom="@+id/title"
android:layout_alignParentEnd="true"
android:layout_marginStart="36dp"
android:layout_marginEnd="-18dp"
android:layout_marginBottom="-14dp"
android:layout_toEndOf="@+id/title"
android:gravity="center"
app:srcCompat="?android:attr/textCheckMarkInverse" />
</RelativeLayout>
recyclerview的item布局:recyclerview_row_item.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
app:cardCornerRadius="10dp"
app:cardElevation="1dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_id"
android:layout_width="wrap_content"
android:layout_height="150dp"
android:layout_marginLeft="35dp"
android:layout_weight="1"
android:gravity="center|top"
android:paddingTop="8dp"
android:text="1"
android:textSize="40sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="25"
android:orientation="vertical">
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="2"
android:gravity="center|left"
android:paddingLeft="100dp"
android:paddingTop="10dp"
android:text="TextView"
android:textSize="34sp"
android:textStyle="italic" />
<TextView
android:id="@+id/tv_date"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:elevation="2dp"
android:gravity="center|top|left"
android:paddingLeft="100dp"
android:paddingTop="20dp"
android:text="TextView"
android:textSize="20sp" />
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
长按item的上下文菜单:diary_context_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_delete"
android:title="删除" />
<item
android:id="@+id/menu_update"
android:title="修改" />
</menu>
recyclerview主界面的菜单布局:diary_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/item_search"
android:icon="@android:drawable/ic_menu_search"
android:title="搜索"
app:actionViewClass="android.widget.SearchView"
app:showAsAction="always" />
</menu>
代码实现:
MainActivity:
package com.example.diaryapplication;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
private EditText et_user;
private EditText et_password;
private CheckBox cb_remember;
private Button bt_login;
private View.OnClickListener listener1=new View.OnClickListener() {
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.login:
login();
break;
}
}
};
public void init(){
et_user=(EditText) findViewById(R.id.user);
et_password=(EditText) findViewById(R.id.password);
cb_remember=(CheckBox) findViewById(R.id.remember);
bt_login=(Button) findViewById(R.id.login);
bt_login.setOnClickListener(listener1);
}
public void login(){
if(cb_remember.isChecked()){
rememberme();
}else{
unrememberme();
}
Intent intent=new Intent(MainActivity.this,DiaryMain.class);
intent.putExtra("isUpdate","nocreate");
startActivity(intent);
}
private void unrememberme() {
SharedPreferences sp=getSharedPreferences("mydata",Context.MODE_PRIVATE);
SharedPreferences.Editor editor=sp.edit();
editor.clear();
editor.apply();
Log.d("flag","数据已删除");
}
private void rememberme() {
String username=et_user.getText().toString();
String password=et_password.getText().toString();
SharedPreferences sp=getSharedPreferences("mydata", Context.MODE_PRIVATE);
SharedPreferences.Editor editor=sp.edit();
editor.putBoolean("remember",true);
editor.putString("username",username);
editor.putString("password",password);
editor.apply();
Log.d("flag","数据保存成功");
}
public void readSP(){
SharedPreferences sp=getSharedPreferences("mydata",Context.MODE_PRIVATE);
Boolean remember=sp.getBoolean("remember",false);
if(remember){
cb_remember.setChecked(true);
String username=sp.getString("username","");
String password=sp.getString("password","");
et_user.setText(username);
et_password.setText(password);
Log.d("flag","数据读取成功");
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//设置为全屏模式
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
init();
readSP();
}
}
DiaryMain:
package com.example.diaryapplication;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.room.Database;
import androidx.room.Room;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.SearchView;
import com.example.diaryapplication.adapter.CustomAdapter;
import com.example.diaryapplication.dao.DiaryDao;
import com.example.diaryapplication.db.AppDatabase;
import com.example.diaryapplication.entity.Diary;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.TimeZone;
public class DiaryMain extends AppCompatActivity {
private List<Diary> list=new ArrayList<>();
private ImageButton btn_add;
private RecyclerView recyclerView;
private CustomAdapter adapter;
private int id_count=0;
private AppDatabase db;
private DiaryDao diaryDao;
View.OnClickListener listener=new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(DiaryMain.this,EditDiary.class);
intent.setAction("create");
startActivity(intent);
}
};
public void initDatabase(){
db= Room.databaseBuilder(getApplicationContext(), AppDatabase.class,"mydb")
.allowMainThreadQueries()
.build();
diaryDao=db.diaryDao();
}
public void init(){
btn_add=(ImageButton) findViewById(R.id.btn_add);
recyclerView=(RecyclerView) findViewById(R.id.recyclerview);
btn_add.setOnClickListener(listener);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
adapter = new CustomAdapter(list);
recyclerView.setAdapter(adapter);
registerForContextMenu(recyclerView);
}
public void updateList(){
if(getIntent()!=null){
list=diaryDao.getAll();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_diary_main);
//让键盘弹出来是,内容不整体上移
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN| WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
//设置为全屏模式
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
//ActionBar显示返回按钮
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
initDatabase();
updateList();
init();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.diary_menu,menu);
MenuItem searchItem=menu.findItem(R.id.item_search);
SearchView searchView=(SearchView) searchItem.getActionView();
searchView.setQueryHint("搜索");
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
list=diaryDao.getRequiredDiary(s);
adapter.setList(list);
return false;
}
@Override
public boolean onQueryTextChange(String s) {
list=diaryDao.getRequiredDiary(s);
adapter.setList(list);
return false;
}
});
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch ( item.getItemId() ) {
case android.R.id.home:
Intent intent=new Intent(DiaryMain.this,MainActivity.class);
startActivity(intent);
}
return super.onOptionsItemSelected(item);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
getMenuInflater().inflate(R.menu.diary_context_menu,menu);
}
@Override
public boolean onContextItemSelected(@NonNull MenuItem item) {
int position=adapter.getPosition();
switch (item.getItemId()){
case R.id.menu_delete:
removeItem(position);
break;
case R.id.menu_update:
Intent intent=new Intent(DiaryMain.this,EditDiary.class);
intent.setAction("update");
intent.putExtra("idInDatabase",list.get(position).getId());
startActivity(intent);
break;
}
return true;
}
private void removeItem(int position) {
diaryDao.delete(list.get(position));//数据库相应的也要删除
list.remove(position);
adapter.notifyItemRemoved(position);
// adapter.setList(list);
}
}
EditDiary:
package com.example.diaryapplication;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.room.Room;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.example.diaryapplication.dao.DiaryDao;
import com.example.diaryapplication.db.AppDatabase;
import com.example.diaryapplication.entity.Diary;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.TimeZone;
public class EditDiary extends AppCompatActivity {
private ImageView iv_return;
private ImageView iv_confirm;
private TextView tv_edit_date;
private EditText et_edit_title;
private EditText et_edit_content;
private long currentTimeMillis;//目前的时间
private String title;
private String content;
private AppDatabase db;
private DiaryDao diaryDao;
private boolean flag=false;//记录是否保存
View.OnClickListener listener=new View.OnClickListener() {
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.iv_return:
Intent intent=new Intent(EditDiary.this,DiaryMain.class);
if(getIntent().getAction().equals("create")&&flag==true){//执行创建一个新日记并且进行了保存
intent.putExtra("isUpdate","createnew");
}else{
intent.putExtra("isUpdate","nocreate");
}
startActivity(intent);
break;
case R.id.iv_confirm:
//判断内容是否完善,未完善则弹出提示框
if(et_edit_title.getText().toString().equals("")||et_edit_content.getText().toString().equals("")){
new AlertDialog.Builder( EditDiary.this )
.setIcon( R.drawable.alert )
.setTitle("提示")
.setMessage("标题或内容未填写,请完善!")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
return;
}
})
.show();
return;
}
collectAndSaveInfo();
flag=true;
Toast.makeText(EditDiary.this,"数据已保存",Toast.LENGTH_SHORT).show();
break;
}
}
};
//收集信息并保存到数据库中
public void collectAndSaveInfo(){
title=et_edit_title.getText().toString();
content=et_edit_content.getText().toString();
if(getIntent().getAction().equals("update")){
Intent intent=getIntent();
int id=intent.getIntExtra("idInDatabase",-1);
Diary diary=diaryDao.findDiary(id);
diary.setTitle(title);
diary.setContent(content);
diaryDao.update(diary);
}else if(getIntent().getAction().equals("create")){
Diary diary=new Diary();
diary.setTitle(title);
diary.setDate(String.valueOf(currentTimeMillis));
diary.setContent(content);
diaryDao.insert(diary);
}
}
public void initDatabase(){
db= Room.databaseBuilder(getApplicationContext(),AppDatabase.class,"mydb")
.allowMainThreadQueries()
.build();
diaryDao=db.diaryDao();
}
public void init(){
iv_return=(ImageView) findViewById(R.id.iv_return);
iv_confirm=(ImageView) findViewById(R.id.iv_confirm);
tv_edit_date=(TextView) findViewById(R.id.tv_edit_date);
et_edit_title=(EditText) findViewById(R.id.et_edit_title);
et_edit_content=(EditText) findViewById(R.id.et_edit_content);
iv_return.setOnClickListener(listener);
iv_confirm.setOnClickListener(listener);
if(getIntent().getAction().equals("update")){
Intent intent=getIntent();
int id=intent.getIntExtra("idInDatabase",-1);
if(id!=-1){
Diary diary=diaryDao.findDiary(id);
currentTimeMillis=Long.valueOf(diary.getDate());
tv_edit_date.setText(changeTime(currentTimeMillis));
et_edit_title.setText(diary.getTitle());
et_edit_content.setText(diary.getContent());
}
}else if(getIntent().getAction().equals("create")){
//初始化当前时间
currentTimeMillis=System.currentTimeMillis();
tv_edit_date.setText(changeTime(currentTimeMillis));
}
}
public String changeTime(Long timeMillis){
SimpleDateFormat sdf_8 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
sdf_8.setTimeZone(TimeZone.getTimeZone("GMT+8:00"));
return sdf_8.format(timeMillis);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit_diary);
//让键盘弹出来是,内容不整体上移
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN| WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
//设置为全屏模式
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setCustomActionBar();
initDatabase();
init();
List<Diary> diarylist=diaryDao.getAll();
for(Diary diary:diarylist){
Log.d("data",String.valueOf(diary.getId()));
Log.d("data",diary.getDate());
Log.d("data",diary.getTitle());
Log.d("data",diary.getContent());
}
}
//自定义actionbar
private void setCustomActionBar() {
ActionBar.LayoutParams lp = new ActionBar.LayoutParams(ActionBar.LayoutParams.MATCH_PARENT, ActionBar.LayoutParams.MATCH_PARENT, Gravity.CENTER);
View mActionBarView = LayoutInflater.from(this).inflate(R.layout.myactionbar, null);
ActionBar actionBar = this.getSupportActionBar();
actionBar.setCustomView(mActionBarView, lp);
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setDisplayShowHomeEnabled(false);
actionBar.setDisplayShowTitleEnabled(false);
}
}
实体类:Diary
package com.example.diaryapplication.entity;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;
@Entity(tableName = "Diaries")
public class Diary {
@PrimaryKey(autoGenerate = true)
private int id;
@ColumnInfo(name="title")
private String title;
@ColumnInfo(name="date")
private String date;
@ColumnInfo(name="content")
private String content;
public Diary() {
}
public Diary(int id, String title, String date, String content) {
this.id = id;
this.title = title;
this.date = date;
this.content = content;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
适配器adapter:
package com.example.diaryapplication.adapter;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.diaryapplication.R;
import com.example.diaryapplication.entity.Diary;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.TimeZone;
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder>{
private int position;
private List<Diary> list;
int count=0;
public CustomAdapter(List<Diary> list) {
this.list = list;
}
public int getPosition() {
return position;
}
public void setPosition(int position) {
this.position = position;
}
//用于获得删选过后的recyclerview的数据集
public void setList(List<Diary> list){
count=0;//计数需要清零
this.list=list;
notifyDataSetChanged();
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_row_item, parent, false);
ViewHolder viewHolder=new ViewHolder(view);
viewHolder.itemView.setLongClickable(true);
viewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
setPosition(viewHolder.getAdapterPosition());
return false;
}
});
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
Log.d("myflag","yyy");
Diary diary=list.get(position);
holder.tv_id.setText(String.valueOf(++count));
holder.tv_title.setText(diary.getTitle());
//转换时间格式
Long currentTimeMillis = Long.valueOf(diary.getDate());
SimpleDateFormat sdf_8 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
sdf_8.setTimeZone(TimeZone.getTimeZone("GMT+8:00"));
holder.tv_date.setText(sdf_8.format(currentTimeMillis));
}
@Override
public int getItemCount() {
return list.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder{
TextView tv_id;
TextView tv_title;
TextView tv_date;
public ViewHolder(@NonNull View itemView) {
super(itemView);
tv_id=(TextView) itemView.findViewById(R.id.tv_id);
tv_title=(TextView) itemView.findViewById(R.id.tv_title);
tv_date=(TextView) itemView.findViewById(R.id.tv_date);
}
}
}
dao接口:
package com.example.diaryapplication.dao;
import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.Query;
import androidx.room.Update;
import com.example.diaryapplication.entity.Diary;
import java.util.List;
@Dao
public interface DiaryDao {
//根据日期降序排序
@Query("SELECT * FROM Diaries ORDER BY CAST(date AS DECIMAL)DESC")
List<Diary> getAll();
@Query("SELECT * FROM Diaries WHERE id=:id")
Diary findDiary(int id);
@Query("SELECT * FROM Diaries WHERE title LIKE '%'||:searchName||'%'")
List<Diary> getRequiredDiary(String searchName);
@Insert
void insert(Diary diary);
@Delete
void delete(Diary diary);
@Update
void update(Diary diary);
}
AppDatabase:
package com.example.diaryapplication.db;
import androidx.room.Database;
import androidx.room.RoomDatabase;
import com.example.diaryapplication.dao.DiaryDao;
import com.example.diaryapplication.entity.Diary;
@Database(entities = {Diary.class},version = 1)
public abstract class AppDatabase extends RoomDatabase{
public abstract DiaryDao diaryDao();
}
作者也是安卓初学者,请多指教。