上篇介绍了litepal的创建,这篇就来介绍关于recyclerview的创建与页面代码的编写把。
recyclerview也是得添加依赖的,不要忘啦。
implementation 'androidx.recyclerview:recyclerview:1.1.0-rc01'
关于主页面,这里比较简洁,就只有一个创建按钮,下面就是recyclerview列表了。
<?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="match_parent"
android:orientation="vertical"
>
<Button
android:id="@+id/createButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="创建" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent">
</androidx.recyclerview.widget.RecyclerView>
</LinearLayout>
关于recyclerview绑定的页面(就是recyclerview每一行显示的内容),比较简洁只有一个textview来显示名称
<?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="match_parent"
>
<TextView
android:id="@+id/recycler_text"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
还有就是点列表中的一个和点击创建按钮所进去的页面。(用的是同一个页面,只不过点创建进去没有数据而已)也很简单,只有两个按钮一个完成一个删除。剩下的就是显示名称和正文的EditText啦。
//这里对一些属性进行解释一下把,android:orientation="vertical",这个很简单就是是线性布局竖着排列。 android:layout_marginLeft="100dp",这个是左边的边距为100dp, android:background="@null"这个是让EditText没有下划线。
<?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="match_parent"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/display_finish"
android:layout_width="wrap_content"
android:layout_marginLeft="100dp"
android:layout_height="wrap_content"
android:text="完成"/>
<Button
android:id="@+id/display_remove"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="50dp"
android:text="删除"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/colorAccent"/>
<EditText
android:id="@+id/display_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/colorAccent"/>
<EditText
android:id="@+id/display_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null" />
</LinearLayout>
//这里面的View就是为了美观而弄的分界线而且,没有也可以,但是要用的话,兄弟们一定要是大写的V,不要用小写的,会出错的。
下面来说一下最关心的也是最重要的,就是recyclerview的适配器啦
package com.example.memorandum;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
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 MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
Context mContext;
List<data> list;
//mContext,就是引用适配器页面的Activity。list就是列表中要是显示的集合。
public MyAdapter(Context mContext,List<data> list)
{
this.mContext=mContext;
this.list=list;
}
public class ViewHolder extends RecyclerView.ViewHolder {
//绑定recyclerview布局里面的控件,这里只有显示名字的textview
TextView textView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
textView=itemView.findViewById(R.id.recycler_text);
}
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//新建view,第一个参数为Context,添之前传进来的就行,第二个为传绑定的layout,
//格式为R.alyout.layout的名,这里的名字是layout文件夹里的名字,去掉.xml之后的,第三个添null就可以了
View view=View.inflate(mContext,R.layout.recyclerview,null);
ViewHolder viewHolder=new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
//绑定数据
final data d = list.get(position);
holder.textView.setText(d.getName());
//设置textview 的点击事件
holder.textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
/*
* 这里面用到了Intent来传输数据,只要调用intent的putExtra方法就可以了,
* 里面的参数,第一个为数据的key,说白了就是为这个数据定义一个名字,取的时候需要
* 第二个为那个数据,如果是自己定义的类的话,必须继承Serializable才可以。
* Context就可以调用startActivity方法来实现跳转的功能,而要想关闭当前页面,还必须得把它强转为Activity
* 才可以调用finish()方法,来关闭页面。
* */
Intent intent=new Intent(mContext,dispaly.class);
intent.putExtra("name",d);
mContext.startActivity(intent);
Activity main=(Activity)mContext;
main.finish();
}
});
}
//这个方法返回的是列表里面有多少项。返回list的长度就行啦
@Override
public int getItemCount() {
return list.size();
}
}
然后就是关于主页面的编写啦。关litepal的问题下面有说的。
package com.example.memorandum;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Adapter;
import android.widget.Button;
import org.litepal.crud.DataSupport;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//定义与绑定控件
Button button=findViewById(R.id.createButton);
RecyclerView recyclerView=findViewById(R.id.recyclerview);
//定义布局管理,这个是必须的,如果要让recyclerview显示出来,必须得为他配置布局与适配器两个东西。
LinearLayoutManager manager = new LinearLayoutManager(this);
//定义适配器
MyAdapter adapter=new MyAdapter(this, DataSupport.findAll(data.class));
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(manager);
//定义创建按钮得点击事件
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Intent的第一个参数是当前页面,第二个为跳转后的页面
Intent intent=new Intent(MainActivity.this,dispaly.class);
startActivity(intent);
//关闭当前页面
finish();
}
});
}
}
关于显示列表中数据的页面,这里面我们点击列表内数据和点击创建时一个页面,这里来解释一下litepal的用法把,向上一个博客那样定义完之后,我们定义了一个id,但我们并不用给他赋值,赋值也是给不上的,在创建对象时,会自动给赋值一个id,还是唯一标识符,我们更新数据靠的就是它。下面说一下litepal的增删改查方法把。
增加:新建一个类,用set来赋值,最后save即可。
data d2=new data(); d2.setContent(content.getText().toString()); d2.setName(name.getText().toString()); d2.save();
删除:直接调用DataSupport的方法即可。第一个参数为删除的类名.class,第二个,第三个参数为对删除对象的锁定。比如我们这里用的时"id=?"和id,就是说,删除id为d.getId()+""的项,用id来确认删除的对象。
String id=d.getId()+""; DataSupport.deleteAll(data.class,"id=?",id);
更改:先定义一个类的对象,然后用set赋值,最后调用方法updateAll,里面两个参数与删除的后两个时一样的。
String id=d.getId()+"";
d.setContent(content.getText().toString());
d.setName(name.getText().toString());
d.updateAll("id=?",id);
查询:用DataSupport的findAll的方法来查询,里面的参数为类名加.class.
DataSupport.findAll(data.class)
下面是页面的代码:
package com.example.memorandum;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import org.litepal.crud.DataSupport;
import java.util.List;
public class dispaly extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dispaly);
final Button finish=findViewById(R.id.display_finish);
Button remove=findViewById(R.id.display_remove);
final EditText name=findViewById(R.id.display_name);
final EditText content=findViewById(R.id.display_content);
//接收传进来的数据,如果通过创建点进来的话没数据
final data d=(data)getIntent().getSerializableExtra("name");
if(d!=null)//如果d不为null说明是点击列表进来的,有数据
{
//改变控件的数据
name.setText(d.getName());
content.setText(d.getContent());
}
//设置完成的点击事件。
finish.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(d!=null)//如果d不为null说明是点击列表进来的,更新数据库
{
String id=d.getId()+"";
d.setContent(content.getText().toString());
d.setName(name.getText().toString());
d.updateAll("id=?",id);
Intent intent = new Intent(dispaly.this, MainActivity.class);
startActivity(intent);
finish();
}
else //如果d为空的话,说明是点添加进来的,新加数据库
{
if(!name.getText().toString().equals(""))//如果有名字才可以跳回列表
{
data d2=new data();
d2.setContent(content.getText().toString());
d2.setName(name.getText().toString());
d2.save();
Intent intent = new Intent(dispaly.this, MainActivity.class);
startActivity(intent);
finish();
}
}
}
});
//设置删除的点击事件。
remove.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(d!=null)//如果d不为null说明是点击列表进来的,删除数据库中数据。
{
String id=d.getId()+"";
DataSupport.deleteAll(data.class,"id=?",id);
Intent intent = new Intent(dispaly.this, MainActivity.class);
startActivity(intent);
finish();
}
else //如果d为空的话,说明是点添加进来的,只需要返回即可
{
Intent intent = new Intent(dispaly.this, MainActivity.class);
startActivity(intent);
finish();
}
}
});
}
}
//到这里就是全部的代码讲解啦,博主感觉应该是挺全面的把。但有可能也有一些小问题或者小知识点,大家不知道但博主没有讲到的,关于代码问题也可以私信博主或评论。这次的代码讲解博主放在代码里了,而不是像上次一样打字的,感觉还是放在代码里比较容易懂把。
RecyclerView与LitePal实战
本文详细介绍了如何使用RecyclerView展示数据列表,并结合LitePal数据库进行数据的增删改查操作。从依赖添加、页面布局设计,到适配器编写、数据交互,提供了完整的代码示例。

被折叠的 条评论
为什么被折叠?



