Android recyclerview 超简单的多功能列表

RecyclerView 是一个综合性的列表空间 他综合实现了listview gridview 以及瀑布流 使用起来超级简单 而且效果很强大 并且还优化了很多gridview listview 的不足之处
简单说一下RecyclerView的使用
compile ‘com.android.support:recyclerview-v7:24.2.1’ // RecyclerView
compile ‘com.android.support:cardview-v7:23.0.1’ // cardview
我是使用cardview 和RecyclerView 结合使用的
你也可以单独使用RecyclerView 就好
xml 文件

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <android.support.v7.widget.RecyclerView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/recyclerview_list"></android.support.v7.widget.RecyclerView>
    </LinearLayout>
 // 初始化控件
    private void initView(View view) {
        recyclerview_list = (RecyclerView) view.findViewById(R.id.recyclerview_list);
    }
     // 模拟数据
    private List getData() {
        List<String> data = new ArrayList<>();
        String item = "item";
        for (int i = 0; i < 100; i++) {
            data.add(item+i);
        }
        return data;
    }

// item 的 xml 文件

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    app:cardCornerRadius="10dp"
    android:layout_margin="8dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="13sp"
        android:gravity="center"
        android:padding="10dp"
        android:visibility="gone"
        android:text="11"
        android:background="#c3f4b4"
        android:id="@+id/item_title"/>
    <ImageView
        android:visibility="visible"
        android:padding="15dp"
        android:scaleType="centerCrop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/item_img"
        android:src="@mipmap/m1"/>
</android.support.v7.widget.CardView>

// RecyclerView的adapter

class MyAdapter extends RecyclerView.Adapter<MyViewHolder>{
        Context context;
        List<String> data;
        LayoutInflater inflater;
        private List<Integer> mHeights;
        public MyAdapter(Context context,List<String> data) {
            this.context = context;
            this.data = data;
            inflater = LayoutInflater.from(context);
            mHeights = new ArrayList<>();
        }

        @Override
        public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View inflate = inflater.inflate(R.layout.recyc_item, parent, false);
            MyViewHolder myViewHolder = new MyViewHolder(inflate);

            return myViewHolder;
        }

        @Override
        public void onBindViewHolder(MyViewHolder holder, int position) {



        }



        @Override
        public int getItemCount() {
            return data.size();
        }
    }

    class MyViewHolder extends RecyclerView.ViewHolder{

        private final TextView item_title;
        private final ImageView item_img;

        public MyViewHolder(View itemView) {
            super(itemView);
            item_title = (TextView)itemView.findViewById(R.id.item_title);
            item_img = (ImageView) itemView.findViewById(R.id.item_img);
        }
    }

// RecyclerView设置adapter 模式一 listview效果
这里写图片描述

            layoutmaner = new LinearLayoutManager(getContext(),LinearLayoutManager.VERTICAL,false);
        myAdapter = new MyAdapter(getContext(),getData());
        recyclerview_list.setLayoutManager(layoutmaner);
        recyclerview_list.setAdapter(myAdapter);

// RecyclerView设置adapter 模式二 gridview效果

        layoutmaner= new GridLayoutManager(getContext(),2);
        myAdapter = new MyAdapter(getContext(),getData());
        recyclerview_list.setLayoutManager(layoutmaner);
        recyclerview_list.setAdapter(myAdapter);

这里写图片描述

// RecyclerView设置adapter 模式三 瀑布流效果
在adapter中的onBindViewHolder给item 设置一个随机高度

 @Override
        public void onBindViewHolder(MyViewHolder holder, int position) {

            // 随机高度, 模拟瀑布效果.
            if (mHeights.size() <= position) {
                mHeights.add((int) (300 + Math.random() * 600));
            }

            ViewGroup.LayoutParams lp = holder.item_title.getLayoutParams();
            lp.height = mHeights.get(position);

             holder.item_img.setLayoutParams(lp);

        }
         layoutmaner = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
        myAdapter = new MyAdapter(getContext(),getData());
        recyclerview_list.setLayoutManager(layoutmaner);
        recyclerview_list.setAdapter(myAdapter);

这里写图片描述

这这是三种效果 当然还有很多效果并没有在这里展现 等待我们一起挖掘 demo 源码就不上了 真的很简单 随便研究一下 就可以写的出来 自己动手丰衣食足 哈哈 加油哦

关于本效果的外层ui 实现 可阅读 —–>>> https://blog.csdn.net/naide_s/article/details/79755550

猜你喜欢

转载自blog.csdn.net/naide_s/article/details/79839781
今日推荐