Я пытаюсь отобразить набор данных в стиле сетки, используя 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:
Как вы можете видеть на рисунке, столбцы не выровнены (строки 2 и 3, но это очевидно, потому что они имеют одинаковые данные внутри).