阅读更多

随着 Google 推出了全新的设计语言 Material Design,还迎来了新的 Android 支持库 v7,其中就包含了 Material Design 设计语言中关于 Card 卡片概念的实现 —— CardView。RecyclerView也是谷歌V7包下新增的控件,用来替代ListView的使用,在RecyclerView标准化了ViewHolder类似于ListView中convertView用来做视图缓存.

RecyclerView的优点就是,他可以通过设置LayoutManager来快速实现listview、gridview、瀑布流的效果,而且还可以设置横向和纵向显示,添加动画效果等。

CardView实现卡片化效果。

下拉加载使用SwipeRefreshLayout,是官方的下拉刷新控件,简洁美观的风格使其广泛应用在项目中。美中不足的是SwipeRefreshLayout缺少上拉加载的效果,今天结合RecyclerView实现一个支持下拉刷新与上拉加载的SwipeRefreshLayout。

案例包含了:RecyclerView基本使用,RecyclerView上拉刷新下拉加载,RecyclerView多Item布局,CardView基本使用和CardView上拉刷新下拉加载。如图:(注:第三个案例线显示格式在模拟器上有问题,手机则没问题的,手机测试效果更佳)

Android之 RecyclerView,CardView 详解和相对应的上拉刷新下拉加载_第1张图片

 

布局:

 


Activity:

 

 

public class RecyclerViewActivity extends Activity {    private RecyclerView recyclerView;    private List mDatas;    private RecyclerAdapter1 adapter;    @SuppressLint("InlinedApi")    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.demo1);        initData();        initView();    }    private void initView()    {        recyclerView=(RecyclerView) findViewById(R.id.demo1_recycler);        // 设置布局管理LayoutManager        LinearLayoutManager manager=new LinearLayoutManager(this);        //设置水平或者垂直        // manager.setOrientation(LinearLayoutManager.HORIZONTAL);        recyclerView.setLayoutManager(manager);        // (可选)如果可以确定每个item的高度是固定的,设置这个选项可以提高性能        recyclerView.setHasFixedSize(true);        adapter=new RecyclerAdapter1(this,mDatas);        recyclerView.setAdapter(adapter);        adapter.setOnItemClickListener(new IOnClickListenter() {            @Override            public void onItemClick(View view, int position) {                Toast.makeText(getApplicationContext(),position+"---"+mDatas.get(position),Toast.LENGTH_LONG).show();            }        });    }    private void initData() {        mDatas = new ArrayList();        for (int i = 0; i <= 50; i++) {            mDatas.add("item---" +i);        }    }}



 

上拉刷新下拉加载布局

 

                


上拉刷新下拉加载Activity

 

 

public class RecyclerViewPullActivity extends Activity {    private SwipeRefreshLayout swipeRefreshLayout;    private MyRefreshRecyclerView recyclerView;    public static  List list=new ArrayList();    private RecyclerAdapter2 adapter;    private Handler mHandler = new Handler();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.demo2);        initView();    }    private void initView(){        swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_layout);        recyclerView = (MyRefreshRecyclerView) findViewById(R.id.recycler);        adapter=new RecyclerAdapter2();        recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));        swipeRefreshLayout.setColorSchemeResources(R.color.blue,R.color.green);        swipeRefreshLayout.post(new Runnable() {            @Override            public void run() {                swipeRefreshLayout.setRefreshing(true);            }        });        mHandler.postDelayed(new Runnable() {            @Override            public void run() {                getData();                recyclerView.setAdapter(adapter);                adapter.notifyDataSetChanged();                swipeRefreshLayout.setRefreshing(false);            }        },1500);        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {            @Override            public void onRefresh() {                mHandler.postDelayed(new Runnable() {                    @Override                    public void run() {                        getData();                        recyclerView.setAdapter(adapter);                        adapter.notifyDataSetChanged();                        swipeRefreshLayout.setRefreshing(false);                    }                }, 1500);            }        });        recyclerView.setMyRefreshRecyclerViewListener(new MyRefreshRecyclerView.MyRefreshRecyclerViewListener() {            @Override            public void onLoadMore() {                mHandler.postDelayed(new Runnable() {                    @Override                    public void run() {                        if (list.size() > 14) {                            recyclerView.setLoadMore(true);                        } else {                            int randomInt = new Random().nextInt(100);                            list.add("上拉加载添加数字:" + randomInt);                            adapter.notifyDataSetChanged();                            recyclerView.setLoadMore(false);                        }                    }                }, 1000);            }        });    }    private void getData() {        list.clear();        Random random = new Random();        while (list.size() < 12) {            int randomInt = random.nextInt(100);            list.add(String.valueOf(randomInt));        }    }}

 

AS添加依赖库:

 compile 'com.android.support:recyclerview-v7:23.2.1' compile 'com.android.support:cardview-v7:23.2.1'



 

Eclipse下使用 RecyclerView.Jar CardView.Jar 点击下载

 

 

由于代码太多,完整代码未给出,源码直接下载即可

源码点击下载

 

 

 

 

 

 

更多相关文章

  1. Android小項目之---ListView实现论坛管理效果
  2. Android5.0之后 VectorDrawable实现超炫酷动画效果
  3. Android 使用NineOldAndroids实现绚丽的ListView左右滑动删除Ite
  4. 【Android】Android中两种常用布局(LinearLayout和RelativeLayout
  5. android中使用线程池和临时缓存优化网络图片加载
  6. Android通过加载其他应用的Dex文件破解关键数据
  7. Android 实现答题器功能(通过手势实现翻页效果)

随机推荐

  1. LinearLayout和RelativeLayout的属性区别
  2. Android(安卓)透明Dialog
  3. android 自定义组件圆形边框
  4. APIDEMO ACTIVITY 屏幕在出现软键盘情况
  5. Android(安卓)图片拖动和缩放
  6. Android控件常用属性
  7. Android(安卓)安装环境搭建
  8. android布局属性详解
  9. 2011.06.22——— android framelayout布
  10. 安卓调用键盘回车键做保存或调用搜索键执