Android 比ListView更有效率的Listoy2015-05-21 00:08:25
( 2人已投票,[高质量] )
Android的ListView相信大家很是熟悉,用起来好复杂,生产效率有些低,当然,大家也许习惯了。
不过还是有问题的,应该是设计上的问题,当然,ios 也是这种设计。很奇怪为什么这么设计。
所以去看了下源码,瞬间感觉整个人都不好了,好多行呀,有必要这么多吗?
所以从其他地方移植了一个过来,顺带把 GridView 也实现了,代码很少。
大家也可以从中解放下思维,从繁琐的 Android 思维中解放出来,用心体会简洁的魅力。
当然,如果你会喜欢的话,也请在 github Star 一下,并传播给其他人,还有什么比提高工作效率更棒呢。
另外:github 上其他的项目里也有许多有趣的功能,如果你有兴趣,可以帮助移植到你喜欢的领域。
import java.util.ArrayList; import org.aisy.display.USprite; import org.aisy.listoy.Listoy; import org.aisy.listoy.ListoyEnum; import org.aisy.scroller.ScrollerView; import android.content.Context; import android.util.AttributeSet; import android.widget.TextView; public class TestView extends USprite { /** * @param context */ public TestView(Context context) { super(context); init(); } private void init() { TextView tv = new TextView(getContext()); tv.setText("source: https://github.com/ikCourage/aisy_android"); addView(tv); ArrayList<Object> arr = new ArrayList<Object>(); for (int i = 0; i < 100; i++) { arr.add(i, "ITEM " + i); } //source: https://github.com/ikCourage/aisy_android Listoy listoy = new Listoy(getContext()); //如果 item 数量比较多时,应设置为 ListoyEnum.MODE_SHOW(只实例化可显示区域的内容,并且参照 reSet 的重用) //如果 item 数量不多,则可以使用默认的 ListoyEnum.MODE_ALL(实例化全部),此时应手动设置 setRowColumn listoy.setMode(ListoyEnum.MODE_SHOW); listoy.setLayout(ListoyEnum.LAYOUT_VERTICAL); //每一项之间的间隔 //listoy.setPadding(0); //多行一列 //listoy.setRowColumn(arr.size(), 1); //三行三列 //listoy.setRowColumn(3, 3); listoy.setItemRenderer(Item.class); listoy.setDataProvider(arr); //listoy.initializeView(); listoy.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); //addView(listoy); ScrollerView scrollerView = new ScrollerView(getContext()); scrollerView.addView(listoy); addView(scrollerView); //清空 //ScrollerView.clear(); } }
//Item.class
import java.util.List; import org.ais.event.TEvent; import org.ais.interfaces.ITEvent; import org.aisy.listoy.Listoy.ScrollF; import org.aisy.listoy.ListoyItem; import android.content.Context; import android.util.AttributeSet; import android.view.Gravity; import android.view.View; import android.widget.TextView; public class Item extends ListoyItem implements ITEvent { /** * @param context */ public Item(Context context) { super(context); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), heightMeasureSpec); } public void init(String name, int index, Object data) { super.init(name, index, data); setBackgroundColor(0xAA6699FF); TextView tv = new TextView(getContext()); tv.setGravity(Gravity.CENTER); tv.setTextColor(0xFFFFFFFF); tv.setText(itemInfo.toString()); addView(tv, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); //根据 xml 进行布局 //View v = inflate(getContext(), R.layout.item, null); //addView(v); TEvent.newTrigger(NAME + "ITEM", this); } @Override public int reSet(ScrollF f, List<Object> arr, int length) { super.reSet(f, arr, length); if (index < length) { TextView tv = (TextView)getChildAt(0); tv.setText(String.valueOf(index)); } return index; } @Override public void triggerHandler(Object[] args) { } }