2012-02-15 65 views
1

我想要構建一個動態ListView(就像一個具有不同佈局/氣泡的聊天列表)。 我的問題是,每一行都有一個單獨的高度。我的代碼如下, 但每次向下滾動或收到一條新消息, 具有不同高度的行會變得更高。Android - 每行不同高度的ListView/getView()

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; 
} 
} 

我該怎麼辦?

回答

1

通過使用TableLayout而不是ListView解決了此問題。

0

如果你正在以tableRow的方式編程添加tableLayout,你將會遇到性能問題。再想一想,通過使用listView