RecyclerView作为一些Android常用的控件,我们应该多少要接触了解,在实际运用中,尝试不同的方法,解决一些不同场景的问题。
记录一下,自己的开发过程,积累一下经验。
添加依赖之后,才可以使用recyclerview:
implementation 'com.android.support:recyclerview-v7:27.0.2'
第一步,我们来一个简单布局:
来个xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
tools:context="com.example.administrator.test_one.activity.Biaoqian_taskActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:orientation="horizontal">
<ImageButton
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginLeft="10dp"
android:background="@drawable/title_back"
android:onClick="ib_add_shoudev"
/>
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:layout_marginLeft="15dp"
android:layout_marginTop="10dp"
android:textColor="@color/black"
android:text="@string/a_new_biao_06"
android:textSize="28sp" />
<android.support.v7.widget.RecyclerView
android:id="@+id/recy_test01"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
/>
</LinearLayout>
第二步新建一个适配器,存放数据:
RvItem_bq_taskBean.java,存放数据的构造类:
public class RvItem_bq_taskBean {
private String a;
private String b;
private String c;
public RvItem_bq_taskBean(String a, String b, String c) {
this.a = a;
this.b = b;
this.c = c;
}
public String getA() {
return a;
}
public void setA(String a) {
this.a = a;
}
public String getB() {
return b;
}
public void setB(String b) {
this.b = b;
}
public String getC() {
return c;
}
public void setC(String c) {
this.c = c;
}
}
适配器代码:
/**
*2019-3-16
*/
public class MyAdapterItem_bq_task extends RecyclerView.Adapter<MyAdapterItem_bq_task.ViewHolder> {
private List<RvItem_bq_taskBean> list = null;
private Context context = null;
private LayoutInflater inflater = null;
public MyAdapterItem_bq_task(List<RvItem_bq_taskBean> list, Context context) {
this.list = list;
this.context = context;
}
//创建新View,被LayoutManager所调用
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_task_all, viewGroup, false);
ViewHolder vh = new ViewHolder(view);
return vh;
}
//将数据与界面进行绑定的操作
@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
RvItem_bq_taskBean rvItem_bq_taskBean = list.get(position);
viewHolder.tv_taskname.setText(rvItem_bq_taskBean.getA());
viewHolder.tv_taskdev.setText(rvItem_bq_taskBean.getB());
viewHolder.tv_tasktime.setText(rvItem_bq_taskBean.getC());
}
//获取数据的数量
@Override
public int getItemCount() {
return list.size();
}
//自定义的ViewHolder,持有每个Item的的所有界面元素
class ViewHolder extends RecyclerView.ViewHolder {
TextView tv_taskname, tv_taskdev, tv_tasktime;
Button bt_taskstate;
ViewHolder(View view) {
super(view);
tv_taskname = view.findViewById(R.id.tv_taskname);
tv_taskdev = view.findViewById(R.id.tv_taskdev);
tv_tasktime = view.findViewById(R.id.tv_tasktime);
bt_taskstate=view.findViewById(R.id.bt_taskstate);
}
}
}
其中item适配器的布局:
布局代码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="wrap_content"
android:paddingTop="10dp"
android:paddingBottom="15dp"
>
<Button
android:id="@+id/bt_taskstate"
android:layout_width="80dp"
android:layout_height="50dp"
android:layout_marginTop="25dp"
android:background="@mipmap/iv_runing"
android:text="状态"
android:textSize="14sp"
android:textColor="#FFFFFF" />
<LinearLayout
android:id="@+id/lv_1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="15dp"
android:layout_toRightOf="@id/bt_taskstate"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/it_task1"
android:textColor="@color/black" />
<TextView
android:id="@+id/tv_taskdev"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:text="shak" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/it_task2"
android:textColor="@color/black" />
<TextView
android:id="@+id/tv_taskname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="会员名字" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/it_task3"
android:textColor="@color/black" />
<TextView
android:id="@+id/tv_tasktime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:text="2018-12-09 12:00:00" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
完成了这些,我们就可以在activity添加数据,主要代码:
public class Biaoqian_taskActivity extends AppCompatActivity {
private RecyclerView recy_test01;
private MyAdapterItem_bq_task myAdapterItem_bq_task;
private List<RvItem_bq_taskBean> list = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_biaoqian_task);
init();
String a="我是谁";
String b="我在这里啊";
String c="2019-3-16";
//添加数据
for(int i=0; i<=10;i++){
list.add(new RvItem_bq_taskBean(a,b,c));
}
//刷新一下
myAdapterItem_bq_task.notifyDataSetChanged();
}
private void init() {
recy_test01 = findViewById(R.id.recy_test01);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
//垂直方向
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recy_test01.setLayoutManager(linearLayoutManager);
//初始化
myAdapterItem_bq_task = new MyAdapterItem_bq_task(list, Biaoqian_taskActivity.this);
recy_test01.setAdapter(myAdapterItem_bq_task);
}
public void ib_add_shoudev(View view) {
finish();
}
}
最后实习的效果图:
到这里一个简单的demo基本完成了,虽然RecyclerView的控件的出现,可以做复杂的布局,但它不能说完全代替llistview,看自己的项目需求情况而定。各有各的好处,但是作为一名开发的人员来说,多了解一些知识,去掌握,也是一件好事。以上的代码,可以Ctrl+c/v使用,初步接触可以拿来测试学习使用。本人知识水平和经验不足,有问题的可以指出来,我们一起探讨学习一下,谢谢。