Thursday, August 13, 2015

Android 关于 ListView Adapter 的感想

很长时间没有认真的思考过了!



今天 想实现一个,根据数据类型不同。实现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