2016-03-05 1 views
0

У меня проблемы с моим GridView. Прежде всего, он посещает последние строки, если элементы слишком взят. Забавно, что я вычисляю их высоту в getView() пользовательского адаптера, который я использую. Я просто хочу, чтобы GridView отображал 5 строк, высота которых зависит от его высоты. Распечатка родительской высоты и дневной высоты на консоль дает правильные значения.Android GridView убирает предметы и не обновляет их должным образом

Класс адаптера:

public View getView(int position, View convertView, ViewGroup parent) { 
     View day = convertView; 

     if (day == null) {  
      day = inflater.inflate(R.layout.calendar_day_gridcell, parent, false);  
     } 

     int dayHeight = parent.getHeight()/5; // month can spread over at most 5 weeks 

     TextView tvDay = (TextView) day.findViewById(R.id.calendar_grid_cell); 
     tvDay.setHeight(dayHeight); 

     // set text and background colour of tvDay depending on position 
} 

XML Layout для фрагмента, который содержит GridView

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

< 

TextView /> 

<LineaLayout /> <!-- horizontal layout with 7 children --> 

<GridView 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_weight="1.0" 
      android:id="@+id/calendar_grid" 
      android:numColumns="7"/> 
</LinearLayout> 

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

Итак, я хочу, чтобы все элементы с position < X1 имели синий текст, остальные - красные. Когда я создаю новый набор данных (выполняется в публичной функции-члене, в которой вызывается notifyDataSetChanged()) и X2 < X1, тогда все элементы с position < X1 имеют синий текст, хотя некоторые из них должны иметь красный текст (а именно те, которые имеют позицию X1 - X2). Однако цвет фона установлен правильно. Есть идеи?

EDIT

я узнал, что подрезание было вызвано android.support.design.widget.CoordinatorLayout. Я создал проект с AndroidStudio и создал файл activity_main.xml с указанным макетом. Изменение его на LinearLayout устранило проблему обрезки. Однако вторая проблема остается.

+0

Весь смысл GridView заключается в том, что он будет прокручивать ваши элементы, если они окажутся больше, чем могут поместиться на дисплее. Если вы не хотите прокручивать и вместо этого просто хотите двухмерный набор представлений, почему бы вам не использовать GridLayout? –

+0

@DougStevenson Причина GridView имеет OnItem (Long) ClickListener, который, afaik, GridLayout не имеет? И я думал, что GridView более эффективен, поскольку он повторно использует макеты? Не может быть большой сделки, так как я показываю только 32 элемента, но все же. Кроме того, мой GridView даже не прокручивается, пока я не увижу последнюю строку полностью. Он просто отсекает последние предметы. – Ricky

ответ

0

Fixed/работал вокруг него:

Как указывалось уже в этом вопросе, то CoordinatorLayout вызвало кадрирование и изменение его в другой макет фиксированной, что.

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

Смежные вопросы