这周本来在看数据库相关的。。看到一半。想起列表还没做,又倒过来,
先来简单介绍一下
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,大功告成
-----------------------------------------------------------------------------------------------------------------
配置好了直接就可以开始了,
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();
}
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
。。这提醒我们学会英文是多么重要。。。先给自己定个小目标。学他个一亿单词。。