2016-03-05 22 views
0

我在使用GridView時遇到了一些麻煩。首先,如果物品太高,它會裁剪最後一排。 有趣的是,我在我使用的自定義適配器的getView()中計算它們的高度。我只想讓GridView顯示5行,其高度取決於它的高度。將父高度和dayHeight打印到控制檯會給出正確的值。Android GridView作物項目並沒有正確更新它們

適配器類:對包含在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佈局

<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的文本)。但是背景顏色設置正確。有任何想法嗎?

編輯

我發現裁剪被android.support.design.widget.CoordinatorLayout引起的。我使用AndroidStudio設置了該項目,並使用上述佈局創建了activity_main.xml。將其更改爲LinearLayout可修復裁剪問題。 但是,第二個問題依然存在。

+0

GridView的重點在於,如果它們的物體呈現的不止可以在顯示器上顯示,它將滾動您的物品。如果你不想滾動,而只是想要一個二維視圖,爲什麼不用一個GridLayout呢? –

+0

@DougStevenson原因GridView有一個OnItem(長)ClickListener,afaik,GridLayout沒有?我認爲GridView更有效率,因爲它重用了佈局?可能不是什麼大事,因爲我只顯示32項,但仍然是。除此之外,我的GridView甚至不會滾動,直到完全看到最後一行。它只是削減了最後的項目。 – Ricky

回答

0

固定/工作圍繞它:

如問題已經說過的,CoordinatorLayout引起了裁剪和改變它固定的另一個佈局。

對於文本顏色問題: 我只是設置顏色,讓我們說活動的顏色之前,我確定哪個索引實際上獲取哪種顏色。