Android: альтернативный цвет фона в TableLayout внутри ListView - PullRequest
1 голос
/ 21 июня 2011

Я пытаюсь отобразить набор данных в стиле сетки, используя TableLayout внутри ListView. Я хочу, чтобы каждая строка отображалась разным цветом (два цвета поочередно). Он хорошо работает при использовании обычного LinearLayout в ListView, но по какой-то причине при использовании TableLayout я получаю все строки с одинаковым фоном, который, я думаю, является последним установленным.

Для этого я использую BaseAdapter, а в функции getView у меня есть что-то вроде:

public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder;

            if (convertView == null) {
                convertView = mInflater.inflate(R.layout.list, parent, false);
                holder = new ViewHolder();
                holder.from = (TextView) convertView.findViewById(R.id.from);
                holder.to = (TextView) convertView.findViewById(R.id.to);

                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            if(position%2==0) {
                convertView.setBackgroundColor(R.color.cell_background);
            }
            //alternate background
            else {
                convertView.setBackgroundColor(R.color.cell_background_alternate);
            }

            // Bind the data efficiently with the holder.
            holder.from.setText(list.get(position)[0]);
            holder.to.setText(list.get(position)[1]);

            return convertView;
        }

Теперь в моем файле main.xml для активности у меня просто есть ListView. В файле list.xml, который используется для раздувания списка, у меня есть:

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <TableRow
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <TextView android:id="@+id/from"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="left"
            android:layout_weight="1"/>

        <TextView android:id="@+id/to"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="left"
            android:layout_weight="1"/>
    </TableRow>
</TableLayout>

Кроме того, другая проблема заключается в том, что столбцы не выровнены: он просто занимает столько места, сколько нужно для каждой строки, каждого столбца, когда TableLayout должен выровнять все столбцы. Единственный обходной путь, который я нашел, - это установить минимальную ширину столбцов, но это не очень красиво. Любая причина, почему это не работает здесь?

Изменить 21/06: cell not aligned

Как вы можете видеть на рисунке, столбцы не выровнены (строки 2 и 3, но это очевидно, потому что они имеют одинаковые данные внутри).

Ответы [ 2 ]

0 голосов
/ 30 мая 2012

Я также столкнулся с той же проблемой выравнивания заголовка таблицы и строки таблицы с данными, но после многих усилий я нашел единственный способ избавиться от этой проблемы - дать фиксированный размер всем столбцам

0 голосов
/ 21 июня 2011

попробуйте заменить

convertView = mInflater.inflate (R.layout.list, parent, false);

на

convertView = mInflater.inflate (R.layout.list, null);

и для проблемы с выравниванием ячеек таблицы вы можете привести пример bcos снимка Я не получил то, что вы пытаетесь выполнить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...