• 进阶篇-用户界面:3.RecyclerView


    1.使用RecyclerView

         RecyclerView是support.v7包中用来替代传统的ListView布局的,它比ListView更加轻便和易用。

         在使用RecyclerView时首先要 右键项目->open module settings->Dependencies标签->添加一个库 com.android.support:recyclerview-v7:23.3.0。

    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
    
    public class MainActivity extends AppCompatActivity {
        private RecyclerView rv;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            rv = new RecyclerView(this);
            setContentView(rv);
    
            rv.setLayoutManager(new LinearLayoutManager(this));
    
            rv.setAdapter(new RecyclerView.Adapter() {
    
                class ViewHoder extends RecyclerView.ViewHolder {
    
                    private TextView tv;
    
                    public ViewHoder(TextView itemView) {
                        super(itemView);
    
                        tv = itemView;
    
                    }
    
                    public TextView getTv() {
                        return tv;
                    }
                }
    
                @Override
                public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                    return new ViewHoder(new TextView(parent.getContext()));
                }
    
                @Override
                public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
                      ViewHoder vh = (ViewHoder) holder;
                    vh.getTv().setText(data[position]);
                }
    
                @Override
                public int getItemCount() {
                    return data.length;
                }
                private String[] data = new String[]{"test1","test2","test3"};
            });
        }
    }

    该demo实现的功能是在RecyclerView里面呈现test1,test2,test3。

    2.使用资源文件自定义列表项

         新建一个layout资源文件:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="Large Text"
            android:id="@+id/tvTitle"
            android:layout_gravity="center_horizontal" />
    
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="New Text"
            android:id="@+id/tvContent"
            android:layout_gravity="center_horizontal" />
    </LinearLayout>

    其中有两个组件,一个大的标题,一个小的内容。

    创建一个自定义类CellData:

    CellData.java:

    /**
     * Created by lzc on 16/6/30.
     */
    public class CellData {
        public CellData(String title,String content){
            this.title = title;
            this.content = content;
        }
    
        public String title="title";
        public String content="content";
    
    
    }

    将Adaper分离出来,成类

    MyAdapter.java:

    import android.support.v7.widget.RecyclerView;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
    
    /**
     * Created by lzc on 16/6/30.
     */
    class MyAdapter extends RecyclerView.Adapter {
    
        class ViewHoder extends RecyclerView.ViewHolder {
    
            private View root;
            private TextView tvTitle,tvContent;
            public ViewHoder(View root) {
                super(root);
                tvTitle = (TextView) root.findViewById(R.id.tvTitle);
                tvContent = (TextView)root.findViewById(R.id.tvContent);
            }
    
            public TextView getTvContent() {
                return tvContent;
            }
    
            public TextView getTvTitle() {
                return tvTitle;
            }
        }
    
        @Override
        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            return new ViewHoder(LayoutInflater.from(parent.getContext()).inflate(R.layout.list_cell,null));
        }
    
        @Override
        public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
            ViewHoder vh = (ViewHoder) holder;
            CellData cd = data[position];
            vh.getTvTitle().setText(cd.title);
            vh.getTvContent().setText(cd.content);
        }
    
        @Override
        public int getItemCount() {
            return data.length;
        }
        private CellData[] data = new CellData[]{new CellData("title1","content1"),new CellData("title2","content2")};
    
    }

     

       MainActivity.java:

    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;
    
    public class MainActivity extends AppCompatActivity {
        private RecyclerView rv;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            rv = new RecyclerView(this);
            setContentView(rv);
    
            rv.setLayoutManager(new LinearLayoutManager(this));
    
            rv.setAdapter(new MyAdapter());
        }
    
    }

    3.RecyclerView的布局样式

        RecyclerView可以使用其他的布局

    在MainActivity.java中修改:

    rv.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,true));//水平布局并且反转
    rv.setLayoutManager(new GridLayoutManager(this,4));//表格布局 4为显示的列数
  • 相关阅读:
    InfluxDB简单用法
    tcpdump用法
    MySQL 数据库设计规范(二)
    MySQL数据库规范(一)
    ICP问题求解SVD方法
    三角化求3D坐标
    mysql的几个timeout参数
    mybatisconfig
    mysql 连接的回收
    接口性能P99,P95计算
  • 原文地址:https://www.cnblogs.com/androidNot/p/5628704.html
Copyright © 2020-2023  润新知