读书笔记(六)RecyclerView And CardView相关

这周本来在看数据库相关的。。看到一半。想起列表还没做,又倒过来,

先来简单介绍一下

RecyclerView 和 CardView都是android5.0推出的新控件,可以在Support-V7包下找到这2个控件

RecyclerView是ListView的升级版,比起ListView更灵活,更有效率

该控件是一个可以装载大量的视图集合,并且可以非常效率的进行回收和滚动。当你list中的元素经常动态改变时可以使用RecyclerView控件。它提供了如下两个功能:

1、为每个条目位置提供了layout管理器(RecyclerView.setLayoutManager)

2、为每个条目设置了操作动画(RecyclerView.setItemAnimator)


RecyclerView。可以说他只关心它本身,比如假设列表的两种item里的布局要不一样,ListView我们就要一个一个改,RecyclerView的强大之处在于,他将item要引用哪个布局的主动权,交给了其本身。

再其次使用RecyclerView还可以很方便的做出左右滑动,瀑布流等,感兴趣的小伙伴可以在网上找找,有很多教程。

CardView:Google提供的一个卡片式视图组件。CardView继承自FrameLayout,允许你在Card视图中显示信息, CardView也可以设置阴影和圆角。使用它可以使我们的列表更好看






---------------------------------------------------------------------------------------------------

一,关于导入

感觉在这一步就已经被掏空。。网上关于导入的方法有很多。。不过我就成功了一种。

我们已经知道这两个控件的位置了,肯定会想直接添加外部JAR,但这个项目会提醒这是一个抽象的类。

所以我们不直接在构建路径里添加jar。

而是先直接Import这两个安卓项目



然后在导入项目的属性里把is library打上钩钩,这样就能在我们自己的项目里找到这个库并添加进来。

可能的问题:V7下面得V4包不兼容这两个控件,在JAR重新添加V4下的V4包

    


--------------------------------------------------------------------------------------------------

     还遇到了无法运行和调试,不知道是不是中文版的原因。尝试了很多方法。终于找到有用的


在eclipse的安装目录下的plugins文件夹内,找到com.ibm.icu_4.4.2.v20110823.jar(版本号会因IDE版本不同而与此不符),在com.ibm.icu_4.4.2.v20110823.jar/com/ibm/icu/目录下找到ICUConfig.properties文件,用文本编辑器将其中的

com.ibm.icu.util.TimeZone.DefaultTimeZoneType = JDK

修改为

com.ibm.icu.util.TimeZone.DefaultTimeZoneType = ICU

然后保存文件退出,重启eclipse,大功告成


方法原文地址:http://blog.csdn.net/luonanqin/article/details/7862069

-----------------------------------------------------------------------------------------------------------------

配置好了直接就可以开始了,

RecyclerView的使用方法其实和ListView很像

XML 直接放个大框架,在item.xml里为他布局

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>

item.xml

  <android.support.v7.widget.CardView
        android:id="@+id/card_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:foreground="?android:attr/selectableItemBackground"
        android:clickable="true"
        app:cardCornerRadius="3dp"
        app:cardElevation="8dp">
   
                <TextView
                    android:id="@+id/text"
                    android:layout_alignParentBottom="true"
                    android:layout_alignParentLeft="true"
                    android:maxLines="1"
                    android:textSize="20sp"
                    android:padding="5dp"
                    android:textColor="#000000"
                    android:gravity="center"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"/>
         
    </android.support.v7.widget.CardView>


先整理卡片里的内容。上面的比较简单。假如是一个新闻列表,每个卡片里都有图片,文字等。我们要建一个数据类,来放这些到时候就直接传入数据类的对象,体现了良好的封装性和可操作性。因为只有一个文本,这里我们就直接 

 public static final List<String> data;

然后RecyclerView和ListView一样需要一个适配器,它的适配器和我们以往使用ListView的,它不是继承实现BaseAdapter而是去继承RecyclerView.Adapter<RecyclerViewViewHolder>,还需要实现3个方法:

- onCreateViewHolder()

- onBindViewHolder()

- getItemCount()

很明显- onCreateViewHolder()加载item的布局,onBindViewHolder()适配渲染数据到View,- getItemCount()获得卡片数量。

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.NewsViewHolder>{

 public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {  .  
            View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.p0item, viewGroup, false);   
            return new ViewHolder(view);  
        }  
  
        @Override  
        public void onBindViewHolder(ViewHolder viewHolder, int i) {  
            viewHolder.text.setText(data.get(i));  
        }  
  
        @Override  
        public int getItemCount() {  
            return data.size();  
        }  



如果你需要显示的是横向滚动的列表或者竖直滚动的列表,则使用LayoutManager。显然,我们要实现的是ListView的效果,所以需要使用它。生成这个LinearLayoutManager之后可以设置他滚动的方向,默认竖直滚动,所以这里没有显式地设置。
 LinearLayoutManager layoutManager;  


然后再在要呈现列表的页面

// 拿到RecyclerView
		 recyclerView= (RecyclerView)homeView.findViewById(R.id.recyclerView);
		 //添加数据
		 initData();
		// 初始化自定义的适配器
		 adapter=new RecyclerViewAdapter(newsList,getActivity());
		// 设置固定大小
		 recyclerView.setHasFixedSize(true);
			// 设置LinearLayoutManager
	     recyclerView.setLayoutManager(layoutManager);
	  // 设置适配器
	     recyclerView.setAdapter(adapter);


~这样就完成了 RecyclerView的基本使用。接下来还可以考虑添加下拉刷新上拉加载等, 谷歌官方推出的SwipeRefreshLayout(Support-V4包下)可以完成下拉刷新,GitHub上也有很多开源的项目

例如:https://github.com/vinaysshenoy/mugen

https://github.com/gabrielemariotti/cardslib

。。这提醒我们学会英文是多么重要。。。先给自己定个小目标。学他个一亿单词。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值