写一个人日记本程序,有日历,在安卓手机上运行
时间: 2024-03-20 17:41:05 浏览: 18
以下是一个简单的人日记本程序的代码示例,可以在安卓手机上运行:
1. MainActivity.java
```java
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.DialogFragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.CalendarView;
import android.widget.EditText;
import android.widget.Toast;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
public class MainActivity extends AppCompatActivity implements DatePickerFragment.OnDateSetListener {
private RecyclerView recyclerView;
private RecyclerView.Adapter adapter;
private RecyclerView.LayoutManager layoutManager;
private List<Diary> diaryList;
private Button dateButton;
private EditText contentEditText;
private String currentDate;
private DatabaseHelper databaseHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
diaryList = new ArrayList<>();
adapter = new DiaryAdapter(diaryList);
recyclerView.setAdapter(adapter);
dateButton = findViewById(R.id.date_button);
contentEditText = findViewById(R.id.content_edit_text);
Calendar calendar = Calendar.getInstance();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
currentDate = dateFormat.format(calendar.getTime());
dateButton.setText(currentDate);
databaseHelper = new DatabaseHelper(this);
updateDiaryList();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if (item.getItemId() == R.id.action_add) {
showDatePickerDialog();
return true;
}
return super.onOptionsItemSelected(item);
}
public void onSaveButtonClick(View view) {
String content = contentEditText.getText().toString().trim();
if (content.isEmpty()) {
Toast.makeText(this, "请填写日记内容", Toast.LENGTH_SHORT).show();
return;
}
Diary diary = new Diary(currentDate, content);
databaseHelper.addDiary(diary);
updateDiaryList();
contentEditText.setText("");
}
private void updateDiaryList() {
diaryList.clear();
diaryList.addAll(databaseHelper.getDiaryList(currentDate));
adapter.notifyDataSetChanged();
}
private void showDatePickerDialog() {
DialogFragment newFragment = new DatePickerFragment();
newFragment.show(getSupportFragmentManager(), "datePicker");
}
@Override
public void onDateSet(int year, int month, int day) {
currentDate = String.format("%04d-%02d-%02d", year, month + 1, day);
dateButton.setText(currentDate);
updateDiaryList();
}
}
```
2. activity_main.xml
```xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/input_layout"
android:padding="16dp" />
<LinearLayout
android:id="@+id/input_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="vertical"
android:padding="16dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/date_button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="日期" />
<Button
android:id="@+id/save_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="保存"
android:onClick="onSaveButtonClick" />
</LinearLayout>
<EditText
android:id="@+id/content_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="日记内容" />
</LinearLayout>
</RelativeLayout>
```
3. Diary.java
```java
public class Diary {
private String date;
private String content;
public Diary(String date, String content) {
this.date = date;
this.content = content;
}
public String getDate() {
return date;
}
public String getContent() {
return content;
}
}
```
4. DiaryAdapter.java
```java
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 java.util.List;
public class DiaryAdapter extends RecyclerView.Adapter<DiaryAdapter.DiaryViewHolder> {
private List<Diary> diaryList;
public DiaryAdapter(List<Diary> diaryList) {
this.diaryList = diaryList;
}
@NonNull
@Override
public DiaryViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.diary_item, parent, false);
return new DiaryViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull DiaryViewHolder holder, int position) {
Diary diary = diaryList.get(position);
holder.dateTextView.setText(diary.getDate());
holder.contentTextView.setText(diary.getContent());
}
@Override
public int getItemCount() {
return diaryList.size();
}
public static class DiaryViewHolder extends RecyclerView.ViewHolder {
public TextView dateTextView;
public TextView contentTextView;
public DiaryViewHolder(@NonNull View itemView) {
super(itemView);
dateTextView = itemView.findViewById(R.id.date_text_view);
contentTextView = itemView.findViewById(R.id.content_text_view);
}
}
}
```
5. diary_item.xml
```xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/date_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:textAppearanceMedium"
android:textColor="?android:attr/textColorPrimary" />
<TextView
android:id="@+id/content_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:textAppearanceMedium"
android:textColor="?android:attr/textColorSecondary" />
</LinearLayout>
```
6. DatePickerFragment.java
```java
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;
import java.util.Calendar;
public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
private OnDateSetListener listener;
public interface OnDateSetListener {
void onDateSet(int year, int month, int day);
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
listener = (OnDateSetListener) getActivity();
} catch (ClassCastException e) {
throw new ClassCastException(getActivity().toString() + " must implement OnDateSetListener");
}
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
return new DatePickerDialog(getActivity(), this, year, month, day);
}
@Override
public void onDateSet(android.widget.DatePicker view, int year, int month, int dayOfMonth) {
listener.onDateSet(year, month, dayOfMonth);
}
}
```
这个程序包含一个日记列表和一个日历视图,可以添加新的日记并查看指定日期的日记列表。日记数据存储在SQLite数据库中。在添加新日记时,用户可以选择日期,也可以使用当前日期。