第1、2、4区域是在MainActivity里的。而3是一个Fragment,实现首页和文件夹之间的跳转。
点击4(加号),则会生成一个Activity页面,用来编写笔记。
项目编写流程:
1、首先先编写好activity_main.xml文件,完成UI的布局。
除了中间Fragment部分,其余都可以实现。
2、创建一个Fragement。
创建完,测试是否可以实现页面间的切换。
3、准备添加数据,插入到sqlite 数据库。
package com.hnucm.c202001020106;
import androidx.room.Entity;
import androidx.room.PrimaryKey;
@Entity
public class Note {
@PrimaryKey(autoGenerate = true)
public int id;
public String title;
public String context;
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 getContext() {
return context;
}
public void setContext(String context) {
this.context = context;
}
}
package com.hnucm.c202001020106;
import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.Query;
import java.util.List;
@Dao
public interface NoteDao {
@Insert
void insertNote(Note note);
@Delete
void deleteNote(Note note);
@Query("SELECT * FROM Note")
List getAllNote();
@Query("SELECT * FROM Note WHERE title Like '%'||:title||'%'")
List getAllNoteByTitle(String title);
}
package com.hnucm.c202001020106;
import androidx.room.Database;
import androidx.room.RoomDatabase;
@Database(entities = {Note.class},version = 1,exportSchema = false)
public abstract class NoteDatabase extends RoomDatabase{
public abstract NoteDao getNoteDao();
}
4、添加数据。
输入数据后,点击√,就会把数据插入到数据库的表当中。
package com.hnucm.c202001020106;
import androidx.appcompat.app.AppCompatActivity;
import androidx.room.Room;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.Toast;
public class AddNote_Activity extends AppCompatActivity {
EditText title;
EditText context;
NoteDatabase noteDatabase;
NoteDao noteDao;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_note);
title = findViewById(R.id.editTextTextPersonName2);
context = findViewById(R.id.editText2);
noteDatabase = Room.databaseBuilder(this,NoteDatabase.class,"NoteDataBase")
.allowMainThreadQueries()
.build();
noteDao = noteDatabase.getNoteDao();
findViewById(R.id.imageView6).setOnClickListener(view -> {
finish();
});
findViewById(R.id.imageView7).setOnClickListener(view -> {
Note note = new Note();
note.setTitle(title.getText().toString());
note.setContext(context.getText().toString());
noteDao.insertNote(note);
Toast.makeText(this,"添加笔记成功!",Toast.LENGTH_LONG).show();
});
}
}
问题1:
不急,慢慢来理一理。
首先,这个Fragment里放的是一个 RecyclerView。需要用到两个内部类。
// 将列表布局复制n个,并且填充到recyclerview中
public class MyAdapter extends RecyclerView.Adapter{
// 返回列表布局 因为要返回列表布局,所以要知道返回哪个列表布局?
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
// 不能直接返回 item_char.xml 要加载这个布局
// 布局加载
View view = LayoutInflater.from(getContext())
.inflate(R.layout.note_item,parent,false);
MyViewHolder myViewHolder = new MyViewHolder(view);
return myViewHolder;
}
// 返回当前是在第几行 0、1、2...
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
// *** 作列表布局里的控件
String title = noteList.get(position).getTitle();
String context = noteList.get(position).getContext();
holder.titleText.setText(title);
holder.contentText.setText(context);
holder.constraintLayout.setOnClickListener(view -> {
Intent intent = new Intent(getContext(),AddNote_Activity.class);
intent.putExtra("title",title);
intent.putExtra("context",context);
startActivity(intent);
});
}
// 列表布局显示的个数
@Override
public int getItemCount() {
return noteList.size();
}
}
// 要想修改MainActivity里的RecyclerView里的控件(列表布局),我们要再写一个类
// *** 作item里面的控件(指实例化的时候)
// 是一个layout (item_chat.xml)
// 相当于一个构造函数的作用,初始化
public class MyViewHolder extends RecyclerView.ViewHolder{
TextView titleText;
TextView contentText;
ConstraintLayout constraintLayout;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
titleText = itemView.findViewById(R.id.title);
contentText = itemView.findViewById(R.id.content);
constraintLayout = itemView.findViewById(R.id.rootView);
}
}
根据对象数组的大小,返回等量个对应的xml布局。然后获取布局里的控件,给控件设置值就达到目的了。
需要注意的是,这里要获取的是context,就不能用NotePageFragment.this ,用getContext就可以,我还是比较疑惑的。
5、模糊查询。
输入框是在MainActivity里的,而RecyclerView是在Fragment里的。怎么实现输入查询关键字之后,Fragment里的数据发生变换呢?
通过GetActivity就可以获取到Activity,然后就可以找到搜索栏这个控件,就可以读取关键字了
// 模糊查询
getActivity().findViewById(R.id.imageView2).setOnClickListener(view1 -> {
title = getActivity().findViewById(R.id.editTextTextPersonName);
likeSearch(title.getText().toString());
});
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)