Android - 每行中具有不同高度的ListView / getView()

时间:2012-02-15 18:25:48

标签: android listview dynamic height row

我想构建一个动态ListView(就像一个具有不同布局/气泡的聊天列表)。 我的问题是,每一行都有一个单独的高度。我的代码有效, 但每次我向下滚动或收到新消息, 不同高度的行变得更高。

private class dialogAdapter extends BaseAdapter {
private LayoutInflater mInflater;

public dialogAdapter(Context context) {
    mInflater = LayoutInflater.from(context);
}

@Override
public boolean hasStableIds() {
    return true;
}

public int getCount() {
    return dialog.size();
}

public int getViewTypeCount() {
    return 999999;
}

public Object getItem(int position) {
    return dialog.get(position);
}

public int getItemViewType(int position) {
    return position;
}

public String getType(int position) {
    return dialogType.get(position);
}

public long getItemId(int position) {
    return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    Log.w("DRAGII", "POS: "+position);
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.bubble, null);
        holder = new ViewHolder();
        holder.text = (TextView) convertView.findViewById(R.id.text);
        holder.parser = new URLImageParser(holder.text);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    if (position <= dialogCache.size())
        dialogCache.add(position, Html.fromHtml((String)getItem(position),
                holder.parser, null));
    holder.text.setText(dialogCache.get(position));
    holder.type = getType(position);
    int bubble = R.drawable.bubble;
    if (holder.type.equals("R")) bubble = R.drawable.bubble_right;
    else if (holder.type.equals("L")) bubble = R.drawable.bubble_left;
    holder.text.setBackgroundResource(bubble);

    return convertView;
}

class ViewHolder {
    TextView text;
    String type = "B";
    URLImageParser parser;
}
}

我该怎么办?

2 个答案:

答案 0 :(得分:1)

使用TableLayout而不是ListView解决了这个问题。

答案 1 :(得分:0)

如果您以编程方式将tableRow添加到tableLayout,则会出现性能问题。再想一想,使用listView

找到一种方法