• RecyclerView+CardView简单使用


    RecyclerView取代Listview用来显示数据,除此之外还能实现瀑布流的布局。CardView让我们的界面更好看,此外还将使用官方的下拉刷新。

    添加支持:

    compile 'com.android.support:recyclerview-v7:+'//不知道版本号直接写+就行
    compile 'com.android.support:cardview-v7:+'
    

      

    效果图:

    1、RecyclerView+CardView的普通布局

    2、瀑布流布局

    3、还有一张用按钮做成的丑丑的瀑布流,可以对比一下

    一:recyclerView的使用

    其实和listview差不多

    1、自定义adapter,比listview的适配器简单很多,并且要求实现viewHolder来优化

    2、在activity里面绑定布局,适配器,间距等操作。

    适配器代码:

    创建viewHolder,绑定数据

    public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    
        ArrayList lists;//用于显示的数据
    
        public MyAdapter(ArrayList lists){
    
            this.lists = lists;
    
        }
    
        @Override
        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    
            //给view设定自定义的布局
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_layout,parent,false);
            ViewHolder vh = new ViewHolder(view);
            return vh;
        }
    
      //绑定viewHolder的操作 @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.textView.setText(lists.get(position).toString());//绑定数据 } @Override public int getItemCount() { return lists.size(); } //自定义的ViewHolder,持有每个Item的的所有界面元素,其实是优化 public static class ViewHolder extends RecyclerView.ViewHolder { public TextView textView; public ViewHolder(View view){ super(view); textView = (TextView)view.findViewById(R.id.textview);//实例化 } } }

    MainActivity代码:

    使用listview

     recyclerView = (RecyclerView)findViewById(R.id.recycleview);
    
            recyclerView.setLayoutManager(new LinearLayoutManager(this));//线性显示
    
            recyclerView.addItemDecoration(new spaceItemDecoration(30));//设置边距,这个类要自己实现
    
    ArrayList lists = new ArrayList();
    
            for (int i = 0; i < 100; i++) {
    
                lists.add("" + i);
    
            }
    
    
    
            //创建并设置Adapter
            myAdapter = new MyAdapter(lists);
    
            recyclerView.setAdapter(myAdapter);
    

      

    边距:

    public class spaceItemDecoration extends RecyclerView.ItemDecoration {
    
        int space;
    
        public spaceItemDecoration(int space){
    
            this.space = space;
    
    
        }
    
        @Override
        public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
    
    
           //这里就是每个item的边距 outRect.top = space; outRect.left = space; outRect.right = space; outRect.bottom = space; } }

    二:瀑布流布局

    首先要指定布局

    recyclerView.setLayoutManager(new StaggeredGridLayoutManager(4, StaggeredGridLayoutManager.VERTICAL));//指定只有4列
    

    对于每个item,设置随机高度

    public void onBindViewHolder(ViewHolder holder, int position) {
    
    
    
    
            
            ViewGroup.LayoutParams params =  holder.itemView.getLayoutParams();//得到item的LayoutParams布局参数
    
            params.height = (int)(200+Math.random()*400) ;//把随机的高度赋予itemView布局
    
            holder.itemView.setLayoutParams(params);//把params设置给itemView布局
            
            holder.textView.setText(lists.get(position).toString());
    
        }
    

      

    三:cardview

    直接使用就行

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    
        android:paddingLeft="5dp"
        android:paddingRight="5dp"
        android:paddingBottom="5dp"
        android:paddingTop="5dp"
    
        android:layout_width="match_parent"
        android:layout_height="100dp"
    
        >
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/textview"
            />
    
    
    
    </android.support.v7.widget.CardView>
    

    四:官方下拉刷新:

    该控件布局要写在recyclerview的外面:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
    
        tools:context="com.example.administrator.recycletest.MainActivity">
    
        <android.support.v4.widget.SwipeRefreshLayout
            android:id="@+id/id_swipe_ly"
            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/recycleview"
    
            >
    
        </android.support.v7.widget.RecyclerView>
    
        </android.support.v4.widget.SwipeRefreshLayout>
    
    </RelativeLayout>
    

    使用,下拉监听:

    swipeRefreshLayout = (SwipeRefreshLayout)findViewById(R.id.id_swipe_ly);
    
            swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
                @Override
                public void onRefresh() {
    
                    Toast.makeText(MainActivity.this,"Refresh!",Toast.LENGTH_SHORT).show();
    
                    swipeRefreshLayout.setRefreshing(false);//取消刷新动画
    
                }
            });
    

      

  • 相关阅读:
    toFixed()与银行家舍入
    VScode链接服务器并配置公钥-SSH Keys
    改造@vue/cli项目为服务端渲染-ServerSideRender
    vue预渲染及其cdn配置
    界面优化--如何提升用户体验(Velocity.js和GSAP)
    eslint配置介绍-如何在uniapp中配置eslint
    babel 的介绍及其配置
    如何为我的VUE项目编写高效的单元测试--Jest
    計算幾何 學習
    Manacher
  • 原文地址:https://www.cnblogs.com/wzben/p/6114430.html
Copyright © 2020-2023  润新知