lrh1993 / autoflowlayout Goto Github PK
View Code? Open in Web Editor NEW自定义ViewGroup,实现多功能流式布局与网格布局
自定义ViewGroup,实现多功能流式布局与网格布局
AutoFlowLayout 通过addview添加子view时
能根据子view个数,控制大小和行列数,这样这个库,就完美了,个人建议啊
clearView()后重新设置数据,未删除之前的占位区域,导致有空白区域。
比如旧数据占4行,需要重新设置数据
调用clearView ,新的数据只能占据3行
有一行是空白区域,必须重新登录才能够正常。
Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
/**
* 设置数据适配器
* @param adapter
*/
public void setAdapter(FlowAdapter adapter) {
mAdapter = adapter;
if (mAdapter.getCount() != 0) {
for (int i = 0; i < mAdapter.getCount(); i ++) {
View view = mAdapter.getView(i);
addView(view);
}
requestLayout();
}
}
addView的时候报错呢,我在下面初始化了一个list,有影响吗
不错的控件, 解决了我的燃眉之急, 之前我都是动态计算每个 item ,然后再用 RecyclerView 加载, 最近又碰到类似问题, 就像换个方法写,然后搜到了你的这个控件, 其实思路就如你所说, 自定义ViewGroup 动态换行就好了, 感谢之际, 这里有几点建议:
1, 希望 给出所有方法的演示或者给个详细的DEMO; (客户都是小白啊,哈哈)
2. 希望 你能释放下资源, 免得内存泄露;
有空的时候, 我自己回去做个属于自己的换行列表; 呵呵, 路漫漫其修远兮, 吾将上下而求索; 加油 ! 还有感谢.
Manifest.xml中设置了,android:label导致冲突
为什么设置horizontalSpace,verticalSpace无效
SpecialFlowActivity第56行没有把view强转为ImageView
普通流式标签场景点击添加删除单行多行有问题
如果不设置布局的长按点击事件或不单独设置条目的长按点击事件,那么长按条目程序会崩溃,错误信息如下:
java.lang.NullPointerException: Attempt to invoke interface method 'void com.example.library.AutoFlowLayout$OnLongItemClickListener.onLongItemClick(int, android.view.View)' on a null object reference
希望修复这个bug
setAdapter之后怎么获取绘制之后的行数呢?
当item内容有超过一行的时候,会显示不完整,修复方法如下:源码392行
/**
* 如果不需要换行,则累加
*/
lineWidth += childWidth + lp.leftMargin + lp.rightMargin;
//注释该该代码
//lineHeight = Math.max(lineHeight, childHeight + lp.topMargin
// + lp.bottomMargin);
//修复超过两行显示不完整,如果使用最大的item的高度,那么下面的item的高度也就是最大的,会造成显示不完整
lineHeight = childHeight + lp.topMargin
+ lp.bottomMargin;
lineViews.add(child);
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.ViewGroup$LayoutParams android.view.View.getLayoutParams()' on a null object reference
at com.example.library.AutoFlowLayout.setGridLayout(AutoFlowLayout.java:319)
at com.example.library.AutoFlowLayout.onLayout(AutoFlowLayout.java:303)
at android.view.View.layout(View.java:17529)
at android.view.ViewGroup.layout(ViewGroup.java:5612)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
我的getView怎么只走了一次,就只有一个item呢
看了一下Github上的代码。发现你这示例代码不全面,是不是未补充完全?
当设置多选view从不可见到可见重新调用onLayout(),这时选择状态会变反,查看源码原来是在onLayout中清空了mCheckedViews,注释掉mCheckedViews.clear()就行
AutoFlowLayout 通过addview添加子view时,默认子view设置setSelected=true;通过getCheckedViews获取不到views;应该是子view的状态没被选中;但已经生效,怎么解决?
查看源码发现,是因为摆放的时候重复累加了topmargin值
源码446行
// top += lineHeight + lp.topMargin + lp.bottomMargin;
改为
top += lineHeight;
看着是解决了,不知道有没有什么别的问题
如商品规格,要全部显示,但是显示的规格中有不能点击的,就是无货,这种怎么设置
setChecked()
还有,单选后再次点击怎么还可以取消所选中的那一项
11-27 17:33:47.648 14138-14138/com.healthnx.ningxia E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.healthnx.ningxia, PID: 14138
java.lang.NullPointerException
at com.example.library.AutoFlowLayout.setGridLayout(AutoFlowLayout.java:316)
at com.example.library.AutoFlowLayout.onLayout(AutoFlowLayout.java:300)
at android.view.View.layout(View.java:14817)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1660)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1436)
at android.view.View.layout(View.java:14817)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
at android.view.View.layout(View.java:14817)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:14817)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
at android.view.View.layout(View.java:14817)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:14817)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
at android.view.View.layout(View.java:14817)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:14817)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2011)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1768)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1024)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5694)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
at android.view.Choreographer.doCallbacks(Choreographer.java:574)
at android.view.Choreographer.doFrame(Choreographer.java:544)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5019)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
这个选中时候的样式如何设置啊,包括我设置字体的颜色相关的
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.