Android 从listview到RecyclerView的简单尝试

           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使用,初步接触可以拿来测试学习使用。本人知识水平和经验不足,有问题的可以指出来,我们一起探讨学习一下,谢谢。

猜你喜欢

转载自blog.csdn.net/qq_36771930/article/details/88599607