阅读更多

随着 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上拉刷新下拉加载。如图:(注:第三个案例线显示格式在模拟器上有问题,手机则没问题的,手机测试效果更佳)

 

布局:

 


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:最全面的 Webview 详解
  2. android点滴(29) android中设置用户自定义的字体
  3. Android官方刷新组件 SwipeRefreshLayout 的使用
  4. android中Invalidate和postInvalidate的区别
  5. android中使用线程池和临时缓存优化网络图片加载
  6. android中Invalidate和postInvalidate的更新view区别
  7. Android(安卓)启动时 出现黑屏
  8. Android(安卓)WebView全面讲解
  9. Android中的TextView深入学习之加载HTML显示

随机推荐

  1. android activity 生命周期
  2. 在Android中查看和管理sqlite数据库
  3. Android(安卓)WIFI 学习整理+搜索到资料
  4. Android(安卓)ADB的使用
  5. 浅谈android的selector,背景选择器
  6. android selector 背景选择器的使用, butt
  7. Android(安卓)屏幕适配:最全面的解决方案
  8. Android中显示网页的多种方式
  9. 关于android中使用new Message的内存泄露
  10. 如何发布你的Android应用程序