byteam / superadapter Goto Github PK
View Code? Open in Web Editor NEW[Deprecated]. 🚀 Adapter(BaseAdapter, RecyclerView.Adapter) wrapper for Android. 一个Adapter同时适用RecyclerView、ListView、GridView等。
[Deprecated]. 🚀 Adapter(BaseAdapter, RecyclerView.Adapter) wrapper for Android. 一个Adapter同时适用RecyclerView、ListView、GridView等。
在源码中我看到onCreate()方法的具体实现的是偶发现,每一次都会根据layoutId来inflate一个view,但是每次inflate这个view就会产生损耗,而且能够复用convertView的时候也会inflate这个view。
有一种场景是大多数人都会遇到,下拉刷新的时候....会先清空适配器里面的所有 数据,然后在重新添加最新的数据....SuperAdapter 就会先clear notifyDataSetChanged一次,然后addall 会在次调用notifyDataSetChanged 一次...所以添加一个这样的方法可以少调用一次notifyDataSetChanged
使用demo中的MultipleAdapter,在获取数据后调用adapter.add(...)或adapter.addAll(...)更新数据一直报如下异常
java.lang.RuntimeException: Failed to resolve attribute at index 6
at android.content.res.TypedArray.getLayoutDimension(TypedArray.java:636)
at android.view.ViewGroup$LayoutParams.setBaseAttributes(ViewGroup.java:6486)
at android.view.ViewGroup$MarginLayoutParams.<init>(ViewGroup.java:6654)
at android.widget.LinearLayout$LayoutParams.<init>(LinearLayout.java:1895)
at android.widget.LinearLayout.generateLayoutParams(LinearLayout.java:1807)
at android.widget.LinearLayout.generateLayoutParams(LinearLayout.java:62)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:827)
at android.view.LayoutInflater.inflate(LayoutInflater.java:523)
at android.view.LayoutInflater.inflate(LayoutInflater.java:425)
at com.lichfaker.lib.common.views.refresh.SuperAdapter.onCreate(SuperAdapter.java:47)
at com.lichfaker.lib.common.views.refresh.SuperAdapter.onCreate(SuperAdapter.java:17)
at com.lichfaker.lib.common.views.refresh.internal.BaseSuperAdapter.onCreateViewHolder(BaseSuperAdapter.java:287)
at com.lichfaker.lib.common.views.refresh.internal.BaseSuperAdapter.onCreateViewHolder(BaseSuperAdapter.java:28)
at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:5464)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4689)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4599)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1988)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1384)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1347)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:574)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3003)
at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2881)
at android.support.v7.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1457)
at android.support.v7.widget.RecyclerView.access$400(RecyclerView.java:147)
at android.support.v7.widget.RecyclerView$1.run(RecyclerView.java:285)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:799)
at android.view.Choreographer.doCallbacks(Choreographer.java:612)
at android.view.Choreographer.doFrame(Choreographer.java:580)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:785)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5593)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:967)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)
LinearLayoutManager footView宽度不能占全屏
用
StaggeredGridLayoutManager SGlayoutManager = new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL);
代替后上拉加载更多后报错,LinearLayoutManager 可以正常上拉加载更多
java.lang.ArrayIndexOutOfBoundsException
src.length=11 srcPos=10 dst.length=11 dstPos=20 length=-9
java.lang.System.arraycopy(Native Method)
ViewHolder,如果要添加自己的方法咋办,比如用第三方加载图片的,setImgUrl()
在viewholder怎样加载网络图片?demo中没有。
如题
5.0版本默认支持的水波纹效果没了- -
replaceAll(List items) 方法会闪动一下
添加加载动画
上拉加载
设置自定义的加载更多布局
设置空布局
compile 'org.byteam.superadapter:superadapter:3.0.0-alpha1'
或者
compile 'org.byteam.superadapter:superadapter:3.0.0'
都不可以。
请问支持DataBinding吗
在弄 购物车点击增加num++,想要保存当前的值
以下方法会报错
item.setNum(num);
set(layoutPosition,item);
以下方法没效果
mData.get(layoutPosition).setNum(num);
本来3.1版本,更换3.6版本还是这样
分页加载,下拉刷新,把原先的数据全部移除,再添加新内容。
只能用clear()再addAll()曲线救国,而且clear()会报错
Inconsistency detected. Invalid view holder adapter positionViewHolder
只能再重新调用下notifyDataSetChanged()才避免报错。
相关代码如下:
@Override
public void setData(List<Article> data) {
if (page == 0) {
mArticles.clear();
mAdapter.clear();
mAdapter.notifyDataSetChanged();//不要这句会报错
}
mArticles.addAll(data);
mAdapter.addAll(data);
page++;
stopRefreLoad();
}
,
fragment中含list使用superAdapter 发起请求迅速finish activity会报"getSystemService"on a null object reference明显是context为空了导致LayoutInflater.from(context)的crash
改进方法:在LayoutInflater.from(context)前判空 否则的话我现在都是在new xxAdapter前判空 还挺麻烦的
If you want to bind click listener to a subview of itemView
:
item中的某个子view需要绑定点击事件:
@Override
public SuperViewHolder onCreate(View convertView, ViewGroup parent, int viewType) {
SuperViewHolder holder = super.onCreate(convertView, parent, viewType);
holder.findViewById(id).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// just like this, good luck!
}
});
return holder;
}
调用 mAdapter.add(0,map);
之后无法直接添加 item
03-29 15:41:50.207 2997-2997/org.byteam.superadapter D/onClick: -1
03-29 15:41:51.775 2997-2997/org.byteam.superadapter D/onClick: -1
03-29 15:41:52.994 2997-2997/org.byteam.superadapter D/onClick: -1
03-29 15:41:54.662 2997-2997/org.byteam.superadapter D/onClick: -1
03-29 15:42:09.691 2997-2997/org.byteam.superadapter D/onClick: -1
我现在的做法是给item的布局添加一个id. 然后更具这个id在去监听..个人觉得多余了,我还是比较喜欢在onBind里面监听当前的item 的事件.
可以在item点击上防抖动
addAll(List items,Boolean isClear)
如果isClear是true,那么就先把之前的items清空,然后在把最新的items赋值给items。
这个方法在下拉刷新和上拉加载的时候,用的特别平凡。 下拉刷新的时候就得把之前的集合全清空,然后把最新的数据赋值给List items,而当上拉加载的时候就是不清空,在老数据之后添加数据
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.