自己新控件的学习方法首先是看效果,再学习怎么实现,当然在实现过程中难免会遇到各种问题,所谓塞翁失马焉知非福,解决问题的过程能够更好帮助我们接触到更深层次的东西.废话不多说.
--------------------------------------------------------------------------------------------------
RecyclerView的效果的话,如题,一个控件可实现三种效果.那么问题来了,与这三控件相比,RecyclerView到底有什么优势.
捡简单的来讲把,最明显的好处即"举一反三",用RecyclerView通过设置LayoutManager(布局管理器)即可控制其显示方式是ListView或GridView又或瀑布流,简单粗暴.
再者,RecyclerView添加灵活性,所谓的灵活,就是放手让你去闯,那么你面临的是*,又是挑战.你能够实现更炫酷的动画,你也需要自己手动添加更多约束.举个例子来讲,RecyclerView以ListView的形态显示时,你可以通过ItemAnimator设置Item增删的动画(想想就很炫酷),但是,Item的点击事件需要自己手动添加(系统并没有提供这些).
有图有真相,附一张Demo运行出来的图片把.
这个界面的实现是头布局+瀑布流的身子.这样看起来是不是很炫酷!!RecyclerView的使用难就难在Adapter的实现(好好努力 - -).
再看RecyclerView这个名字,recycler是再循环的意思,还记得ListView的Adapter里提供的getView()方法中的参数contentView把,我们做的优化是利用其保存我们的ViewHolder把,RecyclerView的Adapter是直接将ViewHolder封装起来,我们只需要实现自己的ViewHolder就行啦.如下可见
- public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
- int viewType) {
- // create a new view
- View v = LayoutInflater.from(parent.getContext())
- .inflate(R.layout.my_text_view, parent, false);
- // set the view's size, margins, paddings and layout parameters
- ...
- ViewHolder vh = new ViewHolder(v);
- return vh;
- }
- // Replace the contents of a view (invoked by the layout manager)
- @Override
- public void onBindViewHolder(ViewHolder holder, int position) {
- // - get element from your dataset at this position
- // - replace the contents of the view with that element
- holder.mTextView.setText(mDataset[position]);
-
}
--------------------------------------------------------------------------------------------------
关于具体怎么实现的话,我想网上应该有很多这样的Demo,毕竟RecyclerView已经并不陌生了,我这里主要想分享一下自己在实现过程中遇到过的问题.
RecyclerView位于v7包,在SDK下extras的android里就有啦.只需要RecyclerView的话直接把jar包拿出来用就行.
问题一:
The hierarchy of the type MainActivity is inconsistent
出现这个问题的原因可能是导入的Jar包不完整,v7包里的RecyclerView要依赖V4包里的控件,如果v4包比较旧的话就不行了.这样的话,解决方法是在SDK Manager中升级Android-Support-Library至最新,再将v7和v4包导入到项目中.
问题二:
Caused by :java.lang.NoClassDefFoundError :android.support.v7.recyclerview.R$styleable.
这个问题是我在运行的时候出现的.我的解决方法是,更换导入的recyclerview的jar包,位置如下...\sdk\extras\android\m2repository\com\android\support\recyclerview-v7,在这里面应该是有不同版本的jar包,选择与你项目版本匹配的即可.
--------------------------------------------------------------------------------------------
新手入门,错误之处还望指导. = =...