V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Registering
V2EX  ›  程序员

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

  •  
  •   Registering · Dec 1, 2014 · 3566 views
    This topic created in 4165 days ago, the information mentioned may be changed or developed.
    继承自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 replies    2014-12-07 23:44:55 +08:00
    kooze
        1
    kooze  
       Dec 1, 2014
    else 里也判断该position 下 getSide() 的值 重新设置view。但是这样失去了复用的意义了。建议搞两个listItemView 对象。
    a0000
        2
    a0000  
       Dec 1, 2014 via Android
    覆写getTypeCount (好像是这个,记不清啥名了) return 2
    Registering
        3
    Registering  
    OP
       Dec 2, 2014
    @a0000 未遂
    aWangami
        4
    aWangami  
       Dec 2, 2014
    这部分代码看不出什么问题来呀
    hounychang
        5
    hounychang  
       Dec 2, 2014
    现在不要用这样的adapter了,费劲,共享你个好用的。https://github.com/hounychang/BaseAdapter 刚共享到Github上,去看看吧
    Registering
        6
    Registering  
    OP
       Dec 2, 2014
    @a0000 @aWangami @hounychang @kooze

    已经解决,结合两个方法:getItemViewType()以及getViewTypeCount()。
    aWangami
        7
    aWangami  
       Dec 2, 2014
    @Registering 因为什么导致的?
    LittleMK
        8
    LittleMK  
       Dec 7, 2014
    需要重写getItemViewType()以及getViewTypeCount()。
    在getView中调用getItemViewType(position)来判断具体呈现哪个layout
    Registering
        9
    Registering  
    OP
       Dec 7, 2014
    @LittleMK exactily ! 前几天我就是这样解决的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3743 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 04:29 · PVG 12:29 · LAX 21:29 · JFK 00:29
    ♥ Do have faith in what you're doing.