Android - ListView с разной высотой в каждой строке / getView () - PullRequest
1 голос
/ 15 февраля 2012

Я хочу создать динамический 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 ]

1 голос
/ 16 февраля 2012

Решил эту проблему, используя TableLayout вместо ListView.

0 голосов
/ 24 февраля 2014

Если вы добавляете tableRow программно в tableLayout, у вас будут проблемы с производительностью. Подумайте еще раз и найдите способ, используя listView

...