V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Registering
V2EX  ›  程序员

一个左右分布的聊天气泡 listview, adapter 哪里出了问题?

  •  
  •   Registering · 2014-12-01 20:22:38 +08:00 · 3188 次点击
    这是一个创建于 3644 天前的主题,其中的信息可能已经有所发展或是发生改变。
    继承自BaseAdapter的adapter,,出现问题是,列表滑动时,结点有时在左边有时在右边,虽然知道listview中的item是回收复用的,但是感觉还是没有透彻理解,,代码如下:


    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

    ListItemView listItemView = null;
    if (convertView == null) {
    listItemView = new ListItemView();
    if (listData.get(Postion).getSide == RIGHT) {
    convertView = listContainer.inflate(RIGHT_LAYOUT_RES, null);
    listItemView.commentMenberPhoto = (ImageView) convertView.findViewById(R.id.comment_right);
    /****/
    } else {
    convertView = listContainer.inflate(LEFT_LAYOUT_RES, null);
    listItemView.commentMenberPhoto = (ImageView) convertView.findViewById(R.id.comment_left);
    /****/
    }
    }
    convertView.setTag(listItemView);
    } else {
    listItemView = (ListItemView) convertView.getTag();
    }

    /**初始化部分控件的数据**/

    }
    9 条回复    2014-12-07 23:44:55 +08:00
    kooze
        1
    kooze  
       2014-12-01 23:11:58 +08:00
    else 里也判断该position 下 getSide() 的值 重新设置view。但是这样失去了复用的意义了。建议搞两个listItemView 对象。
    a0000
        2
    a0000  
       2014-12-01 23:37:12 +08:00 via Android
    覆写getTypeCount (好像是这个,记不清啥名了) return 2
    Registering
        3
    Registering  
    OP
       2014-12-02 00:32:33 +08:00
    @a0000 未遂
    aWangami
        4
    aWangami  
       2014-12-02 00:35:48 +08:00
    这部分代码看不出什么问题来呀
    hounychang
        5
    hounychang  
       2014-12-02 08:54:05 +08:00
    现在不要用这样的adapter了,费劲,共享你个好用的。https://github.com/hounychang/BaseAdapter 刚共享到Github上,去看看吧
    Registering
        6
    Registering  
    OP
       2014-12-02 09:29:58 +08:00
    @a0000 @aWangami @hounychang @kooze

    已经解决,结合两个方法:getItemViewType()以及getViewTypeCount()。
    aWangami
        7
    aWangami  
       2014-12-02 23:06:53 +08:00
    @Registering 因为什么导致的?
    LittleMK
        8
    LittleMK  
       2014-12-07 23:32:19 +08:00
    需要重写getItemViewType()以及getViewTypeCount()。
    在getView中调用getItemViewType(position)来判断具体呈现哪个layout
    Registering
        9
    Registering  
    OP
       2014-12-07 23:44:55 +08:00
    @LittleMK exactily ! 前几天我就是这样解决的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2775 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:50 · PVG 20:50 · LAX 04:50 · JFK 07:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.