今天 想实现一个,根据数据类型不同。实现Listview Item 的显示不同的样式。 但是 Adapter 只有
public int getItemViewType(int position) {}
/** * Get the type of View that will be created by {@link #getView} for the specified item. * * @param position The position of the item within the adapter's data set whose view type we * want. * @return An integer representing the type of View. Two views should share the same type if one * can be converted to the other in {@link #getView}. Note: Integers must be in the * range 0 to {@link #getViewTypeCount} - 1. {@link #IGNORE_ITEM_VIEW_TYPE} can * also be returned. * @see #IGNORE_ITEM_VIEW_TYPE */int getItemViewType(int position);
这让我蛋疼,
如果,我先把数据中的状态设置给 Adapter, 然后在获取Adapter item 的状态, 再去处理的! 这种方式和 我直接根据数据的类型直接处理的话, 前者似乎我绕远路了。 由于ViewHolder 的原因,其实,我根本就没有 理想的状态。
完全都是在 重用ViewHodler. 我之前想错了。我以为,我会重新设置所有的样式。其实,就算我根据
Adapter. getItemViewType()也是一样的。 原理上并没有什么变化,相反的我还多作了一步的处理!
以上的数据实现的方式: 是根据 数据提供了数据的类型不同!
2 思考有的时候 我们可能会遇到 傻逼后台,他们不想 给我们类型。这个时候我们就必须用
getItemViewType() 其实,这个方法是比较死的。因为,前提是你已经知道你的ListView 中的界面的样式,而且不会改变。
比如:
position= 1 Banner 广告栏
position= 2 不同的Tab(推荐的一些东西)
position》3 之后的样式 是一样的。
这个时候我们就需要先定义好:
public int getItemViewType(int position) {
根据当前的位置 返回类型:
}
public int getViewTypeCount() { } 返回复用布局的总数
处理的时候, 直接根据 有 position 返回的类型处理就好了。
3 老大说的让 数据拥有类型也是非常的好的方式,
我的想法就是 使用 装饰设计模式, 给类添加一个type 的类型, 然后在处理数据的时候,我们根据数据的类型,匹配不同的ViewHolder 处理。 这种方式
拆分的法则, 具体的界面交给不同的ViewHolder 处理, 这样的处理方式用在 界面的变化非常大的界面上的!
No comments:
Post a Comment